如何删除.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);
}
}
有没有更好的方法,如果没有,我将如何使这项工作?
答案 0 :(得分: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(字符串,字符串)
var selection = zip1.SelectEntries("*.*", "FolderName");
for(x = selection.Count - 1; x >= 0; x--)
{
ZipEntry e = selection[x];
zip.RemoveEntry(e.FileName);
}
删除zipfile中所有条目的循环
答案 1 :(得分:6)
这是一种简单的方法:
using (ZipFile zip = ZipFile.Read(@"C:\path\to\MyZipFile.zip"))
{
zip.RemoveSelectedEntries("foldername/*"); // Delete folder and its contents
zip.Save();
}
答案 2 :(得分:1)
您可以实现以下目标
using (ZipArchive zip = ZipFile.Open(@"C:\path\to\MyZipFile.zip", ZipArchiveMode.Update))
{
zip.Entries.Where(x => x.FullName.Contains("Foldername")).ToList()
.ForEach(y =>
{
zip.GetEntry(y.FullName).Delete();
});
}
注意:如果删除了该文件夹中的所有文件,则该文件夹将被自动删除。
答案 3 :(得分: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/