如何在Xamarin表单中解压缩下载的Zip文件

Ste*_*Pet 7 sharpziplib dotnetzip xamarin xamarin.forms

在我的应用程序中,我在My API调用期间收到包含4个pdf文档的ZIP文件.我正在使用以下代码保存ZIP文件.

var rootFolder = FileSystem.Current.LocalStorage;
var file = await rootFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

using (var fileHandler = await file.OpenAsync(FileAccess.ReadAndWrite))
{
    await fileHandler.WriteAsync(document, 0, document.Length);
}
Run Code Online (Sandbox Code Playgroud)

保存文档后,

我如何解压缩并单独将pdf文档保存到手机内存中.任何人都可以指示我解决这个问题.我找到了SharpZipLib和Iconic zip库来解压缩代码; 但是如果在文档中找到了dot net实现,则不知道如何在Xamarin Forms中集成它.

请帮忙.

Spa*_*rai 5

您可以使用 SharpZipLib 解压缩下载的文件。我添加了一个函数来将文件解压缩到下面用户定义的位置。

    private async Task<bool> UnzipFileAsync(string zipFilePath, string unzipFolderPath)
    {
        try
        {
            var entry = new ZipEntry(Path.GetFileNameWithoutExtension(zipFilePath));
            var fileStreamIn = new FileStream(zipFilePath, FileMode.Open, FileAccess.Read);
            var zipInStream = new ZipInputStream(fileStreamIn);
            entry = zipInStream.GetNextEntry();
            while (entry != null && entry.CanDecompress)
            {
                var outputFile = unzipFolderPath + @"/" + entry.Name;
                var outputDirectory = Path.GetDirectoryName(outputFile);
                if (!Directory.Exists(outputDirectory))
                {
                    Directory.CreateDirectory(outputDirectory);
                }

                if (entry.IsFile)
                {
                    var fileStreamOut = new FileStream(outputFile, FileMode.Create, FileAccess.Write);
                    int size;
                    byte[] buffer = new byte[4096];
                    do
                    {
                        size = await zipInStream.ReadAsync(buffer, 0, buffer.Length);
                        await fileStreamOut.WriteAsync(buffer, 0, size);
                    } while (size > 0);
                    fileStreamOut.Close();
                }

                entry = zipInStream.GetNextEntry();
            }
            zipInStream.Close();
            fileStreamIn.Close();
        }
        catch
        {
            return false;
        }
        return true;
    }
Run Code Online (Sandbox Code Playgroud)