2012-03-24 39 views
3

.zipとその中のすべてのファイル(好ましくはDotNetZipを使用しているディレクトリ)を削除するにはどうすればよいですか?.NETを使用してZipファイルのディレクトリを削除するにはどうすればよいですか?

は、今私は、ZIP内のすべてのファイルを走るんだけど、それは動作しません:

foreach (ZipEntry e in zip) 
{ 
    //If the file is in the directory I want to delete 
    if(e.FileName.Substring(0, 9) == "FolderName/") 
    { 
     zip.RemoveEntry(e.FileName);       
    } 
} 

良い方法はありません場合は、どのように私はこの仕事をするのでしょうか?

+0

-1本当にのように、パスがスラッシュで終わらなければならないこと

var sel = (from x in zip.Entries where x.FileName.StartsWith(path, StringComparison.OrdinalIgnoreCase) select x.FileName).ToList(); foreach (var fn in sel) { zip.RemoveEntry(fn); } 

注意を使用しましたか?私は数時間研究した。私はちょうどこれに気づいていないことが分かりませんでした... – Chris

+1

長さ9文字の部分文字列を検索し、11文字のうちの1つと比較することはできませんので、*常に* falseを返します。 (または、これは単なる文字列の例ですか?) – VisualMelon

答えて

7

最初に頑張ってください。コレクションから要素を削除しているときにforeachでループしないでください。 ICollectionをを返す SelectEntries:私はこのよう

for(int x = zip.Count -1; x >= 0; x--) 
{ 
    ZipEntry e = zip[x]; 
    if(e.FileName.Substring(0, 9) == "FolderName/") 
     zip.RemoveEntry(e.FileName);       
} 

にしようとします
ただし、ZIPファイルクラスのメソッドを見て、私はこの方法に気づきました。だから私はそれを行うことは可能だと思う:
EDIT:使用はバージョンSelectEntriesをオーバーロードされたzipファイル

+0

それは素晴らしいことでした。なぜ私は失敗したと思いますか? (可能であれば、今、フォルダを削除する方法はありますか?) – Chris

+3

アイテムを列挙している間にコレクションからアイテムを削除すると、問題を見たことはほとんどありません。このややきちんとしたアプローチは、索引によるコレクションを逆順に反復し、問題を回避します。 – tomfanning

+0

@Chrisファイルを削除しようとしたときに、どのようなエラーが発生しましたか? –

5

内のすべてのエントリのループを削除する(文字列、文字列)

var selection = zip1.SelectEntries("*.*", "FolderName"); 
for(x = selection.Count - 1; x >= 0; x--) 
{ 
    ZipEntry e = selection[x]; 
    zip.RemoveEntry(e.FileName);       
} 

はここでこれを実行するための簡単な方法です:

using (ZipFile zip = ZipFile.Read(@"C:\path\to\MyZipFile.zip")) 
{ 
    zip.RemoveSelectedEntries("foldername/*"); // Delete folder and its contents 
    zip.Save(); 
} 

ディレクトリとすべてのネストされた子ENTRを削除するために、ここでhttp://dotnetzip.herobo.com/DNZHelp/Index.html

0

ドキュメントIEは、私がdir/subdir/

関連する問題