循环遍历ZIP存档的子目录中的文件

时间:2013-07-10 09:15:25

标签: c# .net zip

假设我有一个包含10个文本文件的zip文件。使用以下方法迭代这些文本文件很容易:

using (ZipArchive archive = ZipFile.OpenRead(zipIn))
{
    foreach (ZipArchiveEntry entry in archive.Entries)
    {
        Console.writeLine(entry)
    }
}

但是,假设文本文件位于子目录中:

zip/subdirectory/file1.txt

在这种情况下,上面的代码只输出子目录文件夹('subdirectory'),而不是该文件夹中的所有文本文件。

是否有一种简单的方法可以循环子目录中的文件?

2 个答案:

答案 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();

结果:

enter image description here