我有一个程序,我需要搜索任意数量的嵌套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文件,读取它们并将内容输入数据库。