5

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

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

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

zip/subdirectory/file1.txt

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

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

4

2 回答 2

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
        }

    }
 }
于 2013-07-10T09:30:48.620 回答
2

我无法重现您的问题。它在我的测试用例中运行良好:

using (var archive = ZipFile.OpenRead(zipIn))
{
    foreach (var zipArchiveEntry in archive.Entries)
    {
        Console.WriteLine(zipArchiveEntry);
    }
}
Console.ReadLine();

结果:

在此处输入图像描述

于 2013-07-10T09:30:16.100 回答