我们经常遇到这样的场景,即多个 ZIP 档案被封装在另一个 ZIP 中。在这种情况下,首先,您必须提取父 ZIP,然后逐个提取嵌套档案。为了让您更轻松,在本文中,我们将演示如何在 C# .NET 中提取嵌套的 ZIP 存档,而无需编写复杂的代码。
用于提取嵌套 ZIP 档案的 C# .NET API
要解压缩嵌套的 ZIP 档案,我们将使用 Aspose.ZIP for .NET。该 API 旨在从 .NET 应用程序中执行归档操作。它允许您无缝地创建和操作流行的存档格式。您可以 下载 API 的 DLL 或使用 NuGet 安装它。
PM> Install-Package Aspose.Zip
在 C# 中提取嵌套的 ZIP 档案
为了演示嵌套 ZIP 档案的提取,我们创建了以下包含 3 个条目的 ZIP 文件。
我们将提取每个嵌套的 ZIP 存档并将其内容保存在单独的文件夹中。以下是在 C# 中提取嵌套 ZIP 存档的步骤。
- 首先,创建一个 FileStream 对象来加载 ZIP 文件。
- 然后,使用 Archive 类加载 ZIP 文件。
- 遍历 Archive.Entries 集合中的每个 ArchiveEntry。
- 过滤集合中的 ZIP 档案,并为每个档案执行以下步骤:
- 创建一个 MemoryStream 对象并使用 ArchiveEntry.Open().CopyTo(Stream) 方法将存档条目复制到其中。
- 创建 Archive 类的实例以加载嵌套存档。
- 最后,使用 Archive.ExtractToDirectory(string) 方法将存档提取到文件夹中。
以下代码示例显示了如何在 C# .NET 中解压缩嵌套的 ZIP 存档。
// 在文件流中打开 ZIP 文件
using (FileStream zipFile = File.Open("Archives/nested-archive.zip", FileMode.Open))
{
// 使用存档类加载 ZIP 文件
using (Archive archive = new Archive(zipFile, new ArchiveLoadOptions()))
{
// 访问 ZIP 存档中的每个条目
foreach(ArchiveEntry entry in archive.Entries)
{
if(entry.Name.ToLower().Contains(".zip"))
{
// 为嵌套存档创建内存流
MemoryStream nestedArchiveStream = new MemoryStream();
// 将存档复制到内存流
entry.Open().CopyTo(nestedArchiveStream);
// 从内存流中加载嵌套存档
using (var nestedArchive = new Archive(nestedArchiveStream))
{
// 将存档解压缩到磁盘。
nestedArchive.ExtractToDirectory("Archives/Extracted/"+entry.Name);
}
}
}
}
}
以下是提取的 ZIP 档案的屏幕截图。
获取免费 API 许可证
您可以获得 免费的临时许可证 以使用 Aspose.ZIP for .NET,而不受评估限制。
结论
在本文中,您学习了如何在 C# 中提取嵌套的 ZIP 存档。分步指南和代码示例演示了如何将每个嵌套存档解压缩到单独的文件夹中。此外,您可以访问 文档 来探索 Aspose.ZIP for .NET 的其他功能。此外,您可以通过我们的 论坛 提问。