假设我有一个包含10个文本文件的zip文件。使用以下方法迭代这些文本文件很容易:
using (ZipArchive archive = ZipFile.OpenRead(zipIn))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
Console.writeLine(entry)
}
}
但是,假设文本文件位于子目录中:
zip/subdirectory/file1.txt
在这种情况下,上面的代码只输出子目录文件夹('subdirectory'),而不是该文件夹中的所有文本文件。
是否有一种简单的方法可以循环子目录中的文件?
答案 0 :(得分:8)
我已经复制了你的程序。当我按照您的方式迭代zip存档时,我会获得存档中完整目录结构中所有文件的列表。因此,您不需要递归,只需像现在这样进行迭代。
我理解你的困惑,因为API没有区分文件和文件夹。这是一个帮助的扩展方法:
static class ZipArchiveEntryExtensions
{
public static bool IsFolder(this ZipArchiveEntry entry)
{
return entry.FullName.EndsWith("/");
}
}
然后你可以这样做:
using (var archive = ZipFile.OpenRead("bla.zip"))
{
foreach (var s in archive.Entries)
{
if (s.IsFolder())
{
// do something special
}
}
}
答案 1 :(得分:2)
我无法重现你的问题。它在我的测试用例中工作正常:
using (var archive = ZipFile.OpenRead(zipIn))
{
foreach (var zipArchiveEntry in archive.Entries)
{
Console.WriteLine(zipArchiveEntry);
}
}
Console.ReadLine();
结果: