【问题标题】:create zip file xamarin forms ios创建 zip 文件 xamarin 表单 ios
【发布时间】:2018-11-28 06:16:52
【问题描述】:

我们在 Xamarin forms android 中有 ZipFile 类来压缩文件,有没有办法在 xamarin forms iOS 项目中使用它。我不想使用像“ICSharpCode.SharpZipLib.Zip”这样的第三方库,它有时需要 10 分钟来压缩文件并导致一些其他问题。

我还尝试了 GZipStream,但它没有提供预期的结果。用这个扩展下载后很难解压。

谢谢。

【问题讨论】:

    标签: xamarin xamarin.forms xamarin.ios gzip zip


    【解决方案1】:

    iOS/MacOS 压缩框架将是最快的并且不会导致额外的膨胀

    回复:https://developer.apple.com/documentation/compression?language=objc

    虽然它不支持创建基于“Zip”的内部格式化文件,但它支持多种压缩算法。

    Apple 建议使用COMPRESSION_ZLIB

    zlib 压缩算法,推荐用于跨平台压缩。

    有许多(解)压缩工具可以解压缩基于 zlib 原始文件的文件,但为了使其“更容易”,您可以包含一个标头,以便 gzip(Windows、macOS 和 Linux)可以处理它们没有进一步的变化。 (您也可以在文件中添加基于 CRC 的页脚,但真的不需要,除非您已经在比较 zip 文件的移动和服务器 CRC...)

    带头文件的原始 zlib 示例:

    using (var fileOriginal = new FileStream(inputFile, FileMode.Open))
    using (var fileCompressed = new FileStream(outputZip, FileMode.Create))
    using (var compressionStream = new Compression.CompressionStream(fileCompressed, System.IO.Compression.CompressionMode.Compress, CompressionAlgorithm.Zlib, true))
    {
        var header = new byte[] { 31, 139, 8, 0, 0, 0, 0, 0, 0, 0 }; // \x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00
        fileCompressed.Write(header, 0, header.Length);
    
        fileOriginal.CopyTo(compressionStream);
    }
    

    【讨论】:

      【解决方案2】:

      您可以在共享项目中使用 System.IO.Compression 中的ZipFile.CreateFromDirectory 来压缩文件。示例用法类似于ZipFile.CreateFromDirectory(folderPath, Path.Combine(storagePath, zipFileName));

      【讨论】:

      • 在我的类中添加 using System.IO.Compression 后,我仍然无法从中使用 ZipFile 类。我需要更新任何软件包吗?
      • 仅在.net标准共享项目中可用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      相关资源
      最近更新 更多