создать почтовый файл xamarin формы ios - PullRequest
0 голосов
/ 27 ноября 2018

У нас есть класс ZipFile в формах Xamarin android для архивирования файла, есть ли способ использовать то же самое в проекте iOS для форм Xamarin.Я не хочу использовать сторонние библиотеки, такие как «ICSharpCode.SharpZipLib.Zip», который иногда занимает 10 минут для сжатия файла и вызывает некоторые другие проблемы.

Я также пробовал GZipStream, который не дает желаемых результатов.Трудно извлечь после загрузки с этим расширением.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Платформа сжатия iOS / MacOS была бы самой быстрой и не вызывала бы дополнительных проблем

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

Хотя она не поддерживает создание файла с внутренним форматированием на основе Zip, он поддерживает несколько алгоритмов сжатия.

Apple рекомендует использовать COMPRESSION_ZLIB:

Алгоритм сжатия zlib, рекомендуемый для кросс-платформенного сжатия.

Существует множество (de) инструменты сжатия, которые могут распаковывать файлы на основе сырого zlib, но для упрощения можно включить заголовок, чтобы gzip (Windows, macOS и Linux) мог обрабатывать их без дальнейших изменений.(Вы также можете добавить нижний колонтитул на основе CRC в файл, но он действительно не требуется, если вы уже не сравниваете CRC для мобильных устройств и серверов ваших zip-файлов ...)

Raw zlib w / header Пример:

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);
}
0 голосов
/ 27 ноября 2018

Вы можете использовать ZipFile.CreateFromDirectory из System.IO.Compression в вашем общем проекте для сжатия файла.Пример использования будет как ZipFile.CreateFromDirectory(folderPath, Path.Combine(storagePath, zipFileName));

...