C#打开嵌入式zip文件

时间:2018-06-19 11:00:09

标签: c# zipfile

我有一个程序,我需要搜索任意数量的嵌套zip文件。通过在给定路径中获取存档的名称列表,找到zip文件,打开它们,使用BytesIO将文件转换为字节字符串,然后在字节串上递归地再次调用该方法,我能够在python 3中解决这个问题。像这样:

def zip_dig(source_path, posts):

try:
    with zipfile.ZipFile(source_path, 'r') as zip_ref:  # Open initial zip file, list contents
        for name in zip_ref.namelist():
            if re.search(r'\.zip$', name) is not None:
                if name.endswith('.zip'):
                    zfiledata = BytesIO(zip_ref.read(name))
                    zip_dig(zfiledata, posts)
except zipfile.BadZipFile:
    pass
return posts

我现在需要在C#中解决这个问题,但我似乎无法找到任何等效的解决方案。

我已经广泛搜索并查看了ZipFile和ZipArchive类的文档,但我似乎无法找到类似的解决方法,因为文件引用以Stream而不是String的形式出现:

internal static List<BsonDocument> ZipDig(string path, List<BsonDocument> posts)
    {
        path = Path.GetFullPath(path);

        using (ZipArchive archive = ZipFile.OpenRead(path))
        {
            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                if (entry.FullName.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
                {

                    posts = ZipDig(entry, posts);
                }
            }
        }


            return posts;
    }

感谢任何帮助!

编辑:我应该澄清一下,zip文件通常是几千兆字节,因此从时间消费的角度来看,提取并不是真正的选择。我只是找到一种特定类型的txt文件,读取它们并将内容输入数据库。

1 个答案:

答案 0 :(得分:2)

ZipArchive有一个constructor,它需要一个流。 在初始递归级别之下使用它。