如果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中存储空目录怎么办?正如我所说:许多工具似乎产生了这样的目录条目。
答案 0 :(得分:0)
我在尝试使用目录条目更新 zip 文件时遇到了同样的问题,在更新文件后,zip 文件存在(带有新添加的文件)但已损坏。
最终对我有用的是将 Nuget 引用添加到 DotNetZip
并使用 Ionic.Zip
添加文件:
using (Ionic.Zip.ZipFile zip = Ionic.Zip.ZipFile.Read(parameters.ObjzfPath))
{
zip.AddEntry("newFileEntry", "newFileContent"); // you can use zip.AddFile("newFile.txt") as well
zip.Save();
}