4

我正在尝试从 .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 类对其进行解压缩的代码示例吗?

问候马西莫

4

6 回答 6

9

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

using (ZipFile zipFile = new ZipFile())
{
  zipFile.AddDirectory(sourceFolderPath);
  zipFile.Save(archiveFolderName);
}
于 2008-09-16T10:35:01.103 回答
3

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

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

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

s.UseZip64 = UseZip64.Off;
于 2009-03-18T17:46:48.440 回答
2

对 SharpZipLib 无能为力,但您可以尝试使用ZipPackageSystem.IO.Packaging创建 zip 文件,而无需使用第三部分库(需要 .NET 3+)。

于 2008-09-16T10:32:09.563 回答
2

您不想在 .NET 中使用 ZipPackage 类——它不是一个标准的 zip 模型。是的,但它假定文件中有一个特定的结构,带有一个众所周知的名称的清单,等等。ZipPackage 似乎已针对 Office 文档和 XPS 文档进行了优化。

如果您正在制作通用 ZIP 文件并希望具有良好的互操作性,那么第三方库(例如http://www.codeplex.com/DotNetZip )可能是更好的选择。

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

于 2009-01-04T03:31:47.020 回答
1

要判断它是否真的是符合标准的 ZIP 文件,请参阅 PKZIP 的.ZIP 文件格式规范

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

于 2008-09-16T12:55:28.567 回答
1

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

于 2009-01-28T09:43:34.123 回答