我们在Xamarin表单android中有ZipFile类来压缩文件,有没有办法在xamarin表单iOS项目中使用相同的文件。我不想使用第三方库(例如“ ICSharpCode.SharpZipLib.Zip”),有时需要10分钟来压缩文件并导致其他问题。
我也尝试了GZipStream,它没有给出期望的结果。使用此扩展程序下载后很难提取。
谢谢。
答案 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 ...)
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));