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

How to UnZip downloaded Zip file in Xamarin forms

在我的应用程序中,我在 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);
}

保存文档后,

如何解压缩 pdf 文档并将其单独保存到手机内存中。谁能指导我解决这个问题。我找到了用于解压缩代码的 SharpZipLib 和 Iconic zip 库;但如果在文档中找到,则只有点网实现,不知道如何将其集成到 Xamarin Forms 中。

请帮忙。

您可以使用SharpZipLib 来解压下载的文件。我添加了将文件解压缩到下面的 user-defined 位置的功能。

    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;
    }

.NET 中有一个内置的压缩​​系统System.IO.Compression

使用起来真的很简单:

using System.IO.Compression;
ZipFile.ExtractToDirectory(zipPath, extractPath);

我已经在 Xamarin.Forms 4.7 中测试过了,它没有问题。

ZipFile.ExtractToDirectory(
    Path.Combine(Xamarin.Essentials.FileSystem.CacheDirectory,"archive.zip"),//zipPath 
    Xamarin.Essentials.FileSystem.AppDataDirectory//extractPath
);

在此示例中,我使用 Xamarin.Essentials 来获取公共目录,但这不是强制性的。