【发布时间】:2018-06-19 11:00:08
【问题描述】:
我有一个程序需要搜索任意数量的嵌套 zip 文件。我能够在 python 3 中解决这个问题,方法是在给定路径获取存档的名称列表,找到 zip 文件,打开它们,使用 BytesIO 将文件转换为字节字符串,然后在字节字符串上再次递归调用该方法。像这样:
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 类的文档,但我似乎无法找到类似的解决方法,因为文件引用以流而不是字符串的形式出现:
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 文件通常有几 GB 大,因此从时间消耗的角度来看,提取并不是真正的选择。我只是找到一种特定类型的 txt 文件,读取它们并将内容输入数据库。
【问题讨论】: