帮助从.Net创建Zip文件并从Java读取它们

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

关心马西莫

我使用过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,但您可以尝试使用ZipPackage类System.IO.Packaging创建zip文件,而无需使用第三方库(需要.NET 3+)。

你不想在.NET中使用ZipPackage类 – 它不是一个标准的zip模型。 好吧,但是它假设文件中有一个特定的结构,带有一个着名名称的清单,依此类推。 ZipPackage似乎已针对Office文档和XPS文档进行了优化。

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

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

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

值得一提的是,使用SharpZipLib在Windows Mobile设备上创建ZIP并使用WinZip或Windows XP的内置压缩文件夹function打开它们也毫不费力,使用SharpZipLib在桌面上生成ZIP并使用我的处理方式也没有问题。在移动设备上拥有自己的ZIP提取实用程序(基本上是zlib的包装器)。

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