【发布时间】:2021-01-05 23:23:40
【问题描述】:
如果 zip 文件包含“目录条目”,我遇到了 ZipArchiveMode.Update 的问题。
我知道没有目录条目之类的东西,但有些工具会为 zip 文件中的目录生成带有 ZipArchiveEntry.Length = 0 和 ZipArchiveEntry.Name = "" 的条目。
以下代码现在损坏了 zip 文件:
using (ZipArchive archive = ZipFile.Open(@"D:\TEMP\test.zip", ZipArchiveMode.Update))
{
}
如您所见,除了使用 ZipArchiveMode.Update 打开 zip 文件并在最后处理它之外,我什么都不做。
问题在于“目录条目”似乎被视为文件条目。所以在输出中有新的零字节条目和目录名称。
我仍然可以打开 zip 文件,甚至可以通过拖放操作提取文件。但尝试提取 zip 文件会导致错误消息。可能是因为有两个全名相同的条目?
我的解决方法是避免使用ZipArchiveMode.Update 并使用临时的MemoryStream。然后遍历所有条目,忽略“目录条目”并且只将文件条目复制到流中。这样就成功了。
这是ZipArchive 中的错误还是目录条目有误?如果我想在 zip 中存储空目录怎么办?正如我所说:许多工具似乎都可以生成这样的目录条目。
【问题讨论】: