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

FBr*_*t87 5 .net c# zip

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

using (ZipArchive archive = ZipFile.OpenRead(zipIn))
{
    foreach (ZipArchiveEntry entry in archive.Entries)
    {
        Console.writeLine(entry)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

zip/subdirectory/file1.txt
Run Code Online (Sandbox Code Playgroud)

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

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

Bas*_*Bas 8

我已经复制了你的程序.当我按照您的方式迭代zip存档时,我会获得存档中完整目录结构中所有文件的列表.因此,您不需要递归,只需像现在这样进行迭代.

我理解你的困惑,因为API没有区分文件和文件夹.这是一个帮助的扩展方法:

static class ZipArchiveEntryExtensions
{
    public static bool IsFolder(this ZipArchiveEntry entry)
    {
        return entry.FullName.EndsWith("/");
    }
} 
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

using (var archive = ZipFile.OpenRead("bla.zip"))
{
    foreach (var s in archive.Entries)
    {
        if (s.IsFolder())
        {
            // do something special
        }

    }
 }
Run Code Online (Sandbox Code Playgroud)