C# ZipArchive在存档模式更新时可能存在错误?

C# ZipArchive在存档模式更新时可能存在错误?,c#,.net,zip,C#,.net,Zip,我遇到了ZipArchiveMode的问题。如果zip文件包含“目录条目”,请更新 我知道没有目录条目这样的东西,但是有些工具会为zip文件中的目录生成ZipArchiveEntry.Length=0和ZipArchiveEntry.Name=”“的条目 以下代码现在会损坏zip文件: using (ZipArchive archive = ZipFile.Open(@"D:\TEMP\test.zip", ZipArchiveMode.Update)) { } 正如您所看到的,除了用ZipA

我遇到了ZipArchiveMode的问题。如果zip文件包含“目录条目”,请更新

我知道没有目录条目这样的东西,但是有些工具会为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,并使用一个临时的
内存流。然后迭代所有条目,忽略“目录条目”,只将文件条目复制到流中。这样就行了


这是ZipArchive中的一个bug,还是目录条目有误?如果我想在zip中存储空目录怎么办?正如我所说的:很多工具似乎都会产生这样的目录项。

我在尝试用目录项更新zip文件时遇到了同样的问题,在更新文件后,zip文件存在(使用新添加的文件),但它已损坏

最终对我有效的方法是向
DotNetZip
添加Nuget引用,并使用
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();
}

我在尝试用目录条目更新zip文件时遇到了相同的问题,在更新文件后,zip文件存在(使用新添加的文件),但已损坏

最终对我有效的方法是向
DotNetZip
添加Nuget引用,并使用
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();
}