我正在尝试从 .Net 创建一个可以从 Java 代码读取的 Zip 文件。

我已经使用 SharpZipLib 创建了 Zip 文件,但如果生成的文件根据 #ZipLib 库的 CheckZip 函数有效,并且可以通过 WinZip 或 WinRar 成功解压缩,则在尝试使用 Java 解压缩它时总是会出现错误Java 中的 .Utils.Zip 类。

问题似乎出在 SharpZipLib 编写的错误标头中,我还在 SharpDevelop 论坛上发布了一个问题,但没有结果(请参阅 http://community.sharpdevelop.net/forums/t/8272.aspx 获取信息)但没有结果。

有人有使用 .Net 压缩 Zip 文件并使用 Java.Utils.Zip 类解压缩的代码示例吗?

关于Massimo

有帮助吗?

解决方案

我用过 DotNetZip 库 它似乎工作正常。典型代码:

using (ZipFile zipFile = new ZipFile())
{
  zipFile.AddDirectory(sourceFolderPath);
  zipFile.Save(archiveFolderName);
}

其他提示

我在使用 SharpZipLib(最新版本)创建 zip 并使用 java.utils.zip 提取时遇到了同样的问题。

这就是为我解决问题的方法。我不得不强制排除 zip64 用法:

ZipOutputStream s = new ZipOutputStream(File.Create(someZipFileName))

s.UseZip64 = UseZip64.Off;

无法使用 SharpZipLib,但您可以尝试使用创建 zip 文件 压缩包 班级 系统.IO.封装 不使用第三部分库(需要 .NET 3+)。

您不想在 .NET 中使用 ZipPackage 类 - 它不完全是标准的 zip 模型。确实如此,但它假定文件中有特定的结构,以及具有众所周知名称的清单,等等。ZipPackage 似乎已针对 Office 文档和 XPS 文档进行了优化。

第三方库,例如 http://www.codeplex.com/DotNetZip, 如果您正在处理通用 ZIP 文件并且想要良好的互操作性,则可能是更好的选择。

DotNetZip 构建的文件与几乎所有内容都具有良好的互操作性,包括 Java 的 java.utils.zip。但要小心使用 Java 不支持的功能,例如 ZIP64 或 Unicode。ZIP64 仅对非常大的档案有用,我认为 Java 目前还不能很好地支持这种档案。Java 以特定方式支持 Unicode,因此如果您使用 DotNetZip 生成基于 Unicode 的 ZIP 文件,您只需遵循一些规则即可正常工作。

要判断它是否真的是一个符合要求的ZIP文件,请参见PKZIP的 .ZIP 文件格式规范.

值得一提的是,我使用 SharpZipLib 在 Windows Mobile 设备上创建 ZIP 并使用 WinZip 或 Windows XP 的内置压缩文件夹功能打开它们没有遇到任何问题,而且使用 SharpZipLib 在桌面上生成 ZIP 并使用我的处理它们也没有遇到任何问题。移动设备上有自己的 ZIP 提取实用程序(基本上是 zlib 的包装器)。

我在 Linux 上解压 SharpZipLib 压缩文件时遇到了类似的问题。我想我解决了它(我现在在 Linux 和 Mac 上工作,我测试了它),查看我的博客文章: http://igorbrejc.net/development/c/sharpziplib-making-it-work-for-linuxmac

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top