我正在尝试从.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类对其进行解压缩的代码示例?
此致 马西莫
答案 0 :(得分:8)
我使用过DotNetZip library,似乎工作正常。典型代码:
using (ZipFile zipFile = new ZipFile())
{
zipFile.AddDirectory(sourceFolderPath);
zipFile.Save(archiveFolderName);
}
答案 1 :(得分:3)
我在使用SharpZipLib(最新版本)创建拉链并使用java.utils.zip解压缩时遇到了同样的问题。
以下是解决这个问题的方法。我不得不强制排除zip64用法:
ZipOutputStream s = new ZipOutputStream(File.Create(someZipFileName))
s.UseZip64 = UseZip64.Off;
答案 2 :(得分:2)
无法使用SharpZipLib,但您可以尝试使用ZipPackage类System.IO.Packaging创建zip文件,而无需使用第三方库(需要.NET 3 +)。
答案 3 :(得分: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文件,您只需遵循一些规则即可正常工作。
答案 4 :(得分:1)
要判断它是否真的是符合标准的ZIP文件,请参阅PKZIP的.ZIP File Format Specification。
值得一提的是,使用SharpZipLib在Windows Mobile设备上创建ZIP并使用WinZip或Windows XP的内置压缩文件夹功能打开它们也没有问题,并且使用SharpZipLib和处理在桌面上生成ZIP也没有问题他们在移动设备上使用我自己的ZIP提取实用程序(基本上是zlib的包装器)。
答案 5 :(得分:1)
我在Linux上解压缩SharpZipLib压缩文件时遇到了类似的问题。我想我已经解决了(我现在在Linux和Mac上工作,我测试了它),查看我的博客帖子:http://igorbrejc.net/development/c/sharpziplib-making-it-work-for-linuxmac