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

帮助从.Net创建Zip文件并从Java读取它们,java,.net,interop,zip,Java,.net,Interop,Zip,我正在尝试从.Net创建一个可以从Java代码读取的Zip文件 我已经使用SharpZipLib创建了Zip文件,但是如果生成的文件根据#ZipLib库的CheckZip函数是有效的,并且可以通过WinZip或WinRar成功解压,那么在Java中使用Java.Utils.Zip类解压时,我总是会出错 问题似乎出现在SharpZipLib写的错误标题中,我也在SharpDevelop论坛上发布了一个问题,但没有结果(请参阅以获取信息),但没有结果 是否有人提供了使用.Net压缩Zip文件并使用J

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

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

问题似乎出现在SharpZipLib写的错误标题中,我也在SharpDevelop论坛上发布了一个问题,但没有结果(请参阅以获取信息),但没有结果

是否有人提供了使用.Net压缩Zip文件并使用Java.Utils.Zip类对其进行反压缩的代码示例

问候
Massimo无法帮助您使用SharpZipLib,但您可以尝试使用类创建zip文件,而不使用第三部分库(需要.NET 3+)。

我已经使用过,而且它似乎工作正常。典型代码:

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

要判断它是否真的是一致的ZIP文件,请参阅PKZIP的


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

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

如果您正在处理通用ZIP文件,并且希望具有良好的互操作性,那么第三方库可能是更好的选择


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

在Linux上解压SharpZipLib压缩文件时,我遇到了类似的问题。我想我解决了这个问题(我现在在Linux和Mac上工作,我测试了它),查看我的博客帖子:

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

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

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

s.UseZip64 = UseZip64.Off;

谢谢,我已经快速评估了建议的组件,从CodePlex站点上看,这似乎是一个很好的解决方案。我将检查代码并让您知道不要忘记将新的ZipFile()括在using子句中!ZipFile是可识别的。伙计,我真希望几年前就知道这个图书馆!我觉得SharpZipLib是最好的。。。显然,总有更多的研究空间:)您可能希望添加以下行以防止使用ZIP64格式,而java 6中无法处理java.utils.zip:
zipFile.useZip64 whensaving=ZIP64 option.Never忘了说:当前的解决方案在framework 2.0中工作,但是我们在移植它时对.Net 3.x提出了很好的建议。这个解决方案对我来说很有效,但是在我有机会测试它之前,我已经投票了,现在我不能再投票了。感谢发布此修复;在某些情况下,如果不使用这样的方法创建Zip文件,我就无法让Java打开它。