在 C# 中创建扁平 ZIP 存档

在处理 ZIP 存档时,您可能会遇到一个场景,其中一个 ZIP 文件包含其他 ZIP 文件,从而创建了嵌套结构。如果您想通过将所有内部 ZIP 存档提取到外部存档中来简化此结构,那么您来对地方了。本文将探讨 如何在 C# 中创建扁平 ZIP 存档,使用强大的 Aspose.ZIP for .NET

目录

创建扁平 ZIP 存档的 .NET API 概述

要创建扁平 ZIP 存档,我们将利用 Aspose.ZIP for .NET 库。这个强大的归档 API 允许您创建和提取各种归档格式,包括 ZIP、TAR、GZip 和 7z。您可以轻松地从 NuGet 安装此库,或从 下载部分 下载其 DLL。

PM> Install-Package Aspose.Zip

在 C# 中创建扁平 ZIP 存档的步骤

为了更好地理解扁平 ZIP 存档的结构,请考虑以下示例。最初,我们有一个 ZIP 存档,其中包含另一个 ZIP 存档:

parent.zip
 ├ first.txt
 ├ inner.zip
 │ ├ game.exe
 │ └ subitem.bin
 └ picture.gif

在将此 ZIP 存档转换为扁平结构后,内部 ZIP 的所有条目将被提取到父 ZIP 中,从而导致以下结构:

flatten.zip
 ├ first.txt
 ├ picture.gif
 ├ game.exe
 └ subitem.bin

实现步骤

以下是在 C# 中以编程方式创建扁平 ZIP 存档的方法:

  1. 加载父 ZIP 存档:使用 Archive 类加载父 ZIP。
  2. 初始化列表:创建列表以存储:
    • 要从父 ZIP 中删除的条目
    • 提取的条目及其名称
  3. 遍历存档条目:使用 Archive.Entries 集合循环遍历父 ZIP 中的每个 ArchiveEntry
  4. 处理每个条目
    • 使用 ArchiveEntry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase) 检查条目是否为 ZIP 存档。
    • 如果是,则将其添加到要删除的条目列表中。
    • 使用 ArchiveEntry.Open().CopyTo(MemoryStream) 将条目打开到 MemoryStream 对象中。
    • 遍历内部 ZIP 存档的条目,执行以下操作:
      • 将每个条目的名称添加到要添加的条目列表中。
      • 使用 ArchiveEntry.Open().CopyTo(MemoryStream) 将每个条目加载到 MemoryStream 中。
      • 将条目添加到要添加到父 ZIP 的条目列表中。
  5. 删除内部 ZIP 条目:循环遍历内部 ZIP 存档的列表,并使用 Archive.DeleteEntry(ArchiveEntry) 方法删除每个条目。
  6. 将新条目添加到父 ZIP:循环遍历要添加的条目列表,并使用 Archive.CreateEntry(String, Stream) 方法包含每个条目。
  7. 保存父 ZIP 存档:最后,使用 Archive.Save(String) 方法保存修改后的父 ZIP 存档。

以下是演示如何在 C# 中创建扁平 ZIP 存档的代码示例:

获取免费 API 许可证

您可以获得 一个免费的临时许可证,以在没有任何评估限制的情况下使用 Aspose.ZIP for .NET。

结论

在本教程中,您学习了如何高效地使用 C# 创建扁平 ZIP 存档。我们演示了将内部 ZIP 存档提取到父 ZIP 的过程,有效避免了嵌套文件夹。如需更多信息,请随时查看 Aspose.ZIP for .NET 文档,或通过我们的 论坛 与我们联系。

另见