4

.zip 内のディレクトリとその中のすべてのファイルを削除するにはどうすればよいですか (DotNetZip を使用することをお勧めします)。

現在、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);                          
    }
}

そうでない場合、どうすればこれを機能させることができますか?

4

4 に答える 4

7

最初のタフ。コレクションから要素を削除する間、foreach でループしないでください。
こんな感じでやってみます

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

しかし、ZipFile クラスのメソッドを見ると、ICollection を返す SelectEntries というメソッドに気付きました。だから私はそれが可能だと思います:
編集: オーバーロードされたバージョンを使用する SelectEntries(string,string)

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

zipfile 内のすべてのエントリのループを削除する

于 2012-03-24T20:17:13.360 に答える
0

ディレクトリとネストされたすべての子エントリを削除するために、使用しました

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);
}

パスは、次のようにスラッシュで終了する必要があることに注意してください。dir/subdir/

于 2016-06-12T17:21:47.443 に答える