如果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
中的一个bug还是目录条目不正确?如果我想在zip中存储空目录怎么办?正如我所说:许多工具似乎都能产生这样的目录条目。
2条答案
按热度按时间cl25kdpy1#
我得到了同样的问题时,试图更新一个zip文件与目录条目,更新后的文件zip文件存在(与新添加的文件),但其损坏。
最后,我成功地将Nuget引用添加到
DotNetZip
,并使用Ionic.Zip
添加文件:nnsrf1az2#
在powershell脚本中,我遇到了一个带有更新模式的压缩存档和System.IO.Compressation.ZipFile的问题
只要我在更新模式下打开zip,它就会立即损坏。我的解决方案是使用7zip。