到目前为止,我一直在成功使用DotNetZip,但现在我遇到了打嗝。我想知道我是否只是遗漏了一些东西,这是预期的行为,或者这实际上是一个错误。
我使用以下简单代码遍历Zip中的所有文件:
using (ZipFile zip = ZipFile.Read(filepath))
{
foreach (ZipEntry content in zip)
{
// do stuff
}
}
这似乎工作正常,它遍历zip中的所有文件和文件夹。但是现在我遇到了一个Zip,其中这个迭代跳过了zip中的文件夹。如果我检查ZipFile的entries属性,它确实不包含文件夹。因此,不是导致问题的迭代,ZipFile本身似乎读错了。如果我用FileZip.CheckZip(...)检查它似乎都很好,FileZip.FixZipDirectory(...)也没有帮助。如果用7zip等打开,Zip似乎没问题。
编辑: 好吧,它似乎是拉链的某种问题。我解压缩并重新压缩,现在条目列表包含所有文件夹。不幸的是,我无法影响使用此算法扫描哪个拉链。如果有人能指出我可能的方法来检测或处理这种有缺陷的拉链,那就太好了。目前我能想到的唯一方法是从文件条目名称中获取所有文件夹名称(其中包含文件夹名称作为前缀)。