创建zip文件xamarin表单ios

时间:2018-11-27 18:08:20

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

我们在Xamarin表单android中有ZipFile类来压缩文件,有没有办法在xamarin表单iOS项目中使用相同的文件。我不想使用第三方库(例如“ ICSharpCode.SharpZipLib.Zip”),有时需要10分钟来压缩文件并导致其他问题。

我也尝试了GZipStream,它没有给出期望的结果。使用此扩展程序下载后很难提取。

谢谢。

2 个答案:

答案 0 :(得分:1)

iOS / MacOS压缩框架将是最快的,不会造成其他问题

re: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);
}

答案 1 :(得分:0)

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