如何解压缩 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 来获取公共目录,但这不是强制性的。
在我的应用程序中,我在 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 来获取公共目录,但这不是强制性的。