Csharp/C#教程:Zip条目名称以目录分隔符字符结尾但包含数据分享


Zip条目名称以目录分隔符字符结尾但包含数据

System.IO.Compression.ZipFile.ExtractToDirectory(zipPath, extractPath); 

在C#中使用ZipFile,我正在尝试从已知位置提取文件,并且它抛出以下错误:System.IO.Exception:Zip条目名称以目录分隔符字符结尾但包含数据

我做了一些研究,在MSDN中解释了ExtractToDirectory但是找不到这个错误定义。 你能解释为什么会发生这种错误吗?

来自MSDN:

IOExceptionexception

destinationDirectoryName指定的目录已存在。

-要么-

存档中条目的名称为空,仅包含空格,或至少包含一个无效字符。

-要么-

提取存档条目将创建一个位于destinationDirectoryName指定的目录之外的文件。 (例如,如果条目名称包含父目录访问器,则可能会发生这种情况。)

-要么-

要提取的存档条目与已从同一存档中提取的条目具有相同的名称。

我的研究表明,当您使用“Ultra”压缩级别使用7-Zip实用程序压缩文件时,某些存档无法使用.NET System.IO.Compression.ZipFile.ExtractToDirectory()方法解压缩。 错误消息是:Zip条目名称以目录分隔符字符结尾但包含数据。

根据我的观察,只有满足以下3个条件时才会出现此错误:

  1. 目标存档很大 – 500MB +(小档案似乎解压缩很好)。
  2. 存档的根目录只包含文件夹(如果您将至少一个文件添加到存档的根目录,它也会解压缩)。
  3. 使用7-Zip Ultra压缩。

最后我找到了这个7-Zip bug的三个解决方案。

解决方案1 :将至少一个文件添加到存档的根目录(任何虚拟文件或readme.txt文件)。

解决方案2 :使用本机Windows压缩实用程序(选择文件,右键单击,发送到 – >压缩文件夹)。

解决方案3 :不要使用7-Zip Ultra压缩。

所有这些解决方案都解决了我的问题。 选择最适合您项目的项目。

ZipArchive条目以目录分隔符“/”结尾但具有长度!= 0时发生错误

您可以轻松找到这些条目

上述就是C#学习教程:Zip条目名称以目录分隔符字符结尾但包含数据分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)

 zip.Entries.Where(o => o.FullName.EndsWith("/") && o.Length != 0) 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ctvol.com/cdevelopment/956759.html

(0)
上一篇 2021年11月21日
下一篇 2021年11月21日

精彩推荐