c# - Zip 条目名称以目录分隔符结尾,但包含数据

标签 c# exception extract zip

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

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

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

来自 MSDN:

IO异常

The directory specified by destinationDirectoryName already exists.

-或-

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

-或-

Extracting an archive entry would create a file that is outside the directory specified by destinationDirectoryName. (For example, this might happen if the entry name contains parent directory accessors.)

-或-

An archive entry to extract has the same name as an entry that has already been extracted from the same archive.

最佳答案

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

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

  1. 目标存档很大 - 500MB 以上(小存档似乎可以很好地解压)。
  2. 存档的根目录仅包含文件夹(如果您将至少一个文件添加到存档的根目录,它也可以正常解压缩)。
  3. 使用 7-Zip Ultra 压缩。
<小时/>

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

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

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

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

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

关于c# - Zip 条目名称以目录分隔符结尾,但包含数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24941741/

相关文章:

c# - 如何从我的 asp.net 应用程序注销用户?

c# - 设计一个多对一的移动应用程序 -> 数据库 -> 桌面应用程序项目

python - 避免异常?

php - 从 PHP 中的 Phar 存档复制特定目录

python - 在 Python 中分割字符串列并提取第二部分

C# 通过递归获取层次列表

c# - TextBlock 未显示在 ListView 中

c# - 仅在反射创建对象时 Release模式下出现异常

javascript - 如何在 Promise 中捕获未捕获的异常

python - 如何使用 beautifulsoup 提取内容