【问题标题】:Help in creating Zip files from .Net and reading them from Java帮助从 .Net 创建 Zip 文件并从 Java 读取它们
【发布时间】:2015-06-25 16:12:41
【问题描述】:

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

问候 马西莫

【问题讨论】:

    标签: java .net interop zip


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我已经快速评估了建议的组件,并且从 CodePlex 站点来看,这似乎是一个不错的解决方案。我会检查代码并通知您
    • 不要忘记将 new ZipFile() 包含在 using 子句中! ZipFile 是 IDisposable。
    • 伙计,我希望我早在几年前就知道这个图书馆!我认为 SharpZipLib 是最好的……显然,总是有更多研究的空间:)
    • 您可能需要添加以下行以防止使用的 ZIP64 格式,java.utils.zip 在 Java 6 中无法处理:zipFile.UseZip64WhenSaving = Zip64Option.Never;
    【解决方案2】:

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

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

    ZipOutputStream s = new ZipOutputStream(File.Create(someZipFileName))
    
    s.UseZip64 = UseZip64.Off;
    

    【讨论】:

    • 这个解决方案对我有用,但是我在有机会测试它之前就对其进行了投票,现在我不能再次对其进行投票了。
    • 感谢您发布此修复程序;在某些情况下,如果不使用诸如此类的方法创建 Zip 文件,我无法让 Java 打开它。
    【解决方案3】:

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

    【讨论】:

    • 忘了说:目前的解决方案适用于框架 2.0,但是当我们移植它时,关于 .Net 3.x 的建议很好
    【解决方案4】:

    判断是否真的是符合标准的ZIP文件,请看PKZIP的.ZIP File Format Specification

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

    【讨论】:

      【解决方案5】:

      您不想在 .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 文件,您只需遵循一些规则,它就可以正常工作。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-03
          • 1970-01-01
          • 1970-01-01
          • 2011-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-04
          相关资源
          最近更新 更多