在处理 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 存档的方法:
- 加载父 ZIP 存档:使用 Archive 类加载父 ZIP。
- 初始化列表:创建列表以存储:
- 要从父 ZIP 中删除的条目
- 提取的条目及其名称
- 遍历存档条目:使用 Archive.Entries 集合循环遍历父 ZIP 中的每个 ArchiveEntry。
- 处理每个条目:
- 使用
ArchiveEntry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase)
检查条目是否为 ZIP 存档。 - 如果是,则将其添加到要删除的条目列表中。
- 使用
ArchiveEntry.Open().CopyTo(MemoryStream)
将条目打开到 MemoryStream 对象中。 - 遍历内部 ZIP 存档的条目,执行以下操作:
- 将每个条目的名称添加到要添加的条目列表中。
- 使用
ArchiveEntry.Open().CopyTo(MemoryStream)
将每个条目加载到MemoryStream
中。 - 将条目添加到要添加到父 ZIP 的条目列表中。
- 使用
- 删除内部 ZIP 条目:循环遍历内部 ZIP 存档的列表,并使用 Archive.DeleteEntry(ArchiveEntry) 方法删除每个条目。
- 将新条目添加到父 ZIP:循环遍历要添加的条目列表,并使用 Archive.CreateEntry(String, Stream) 方法包含每个条目。
- 保存父 ZIP 存档:最后,使用 Archive.Save(String) 方法保存修改后的父 ZIP 存档。
以下是演示如何在 C# 中创建扁平 ZIP 存档的代码示例:
获取免费 API 许可证
您可以获得 一个免费的临时许可证,以在没有任何评估限制的情况下使用 Aspose.ZIP for .NET。
结论
在本教程中,您学习了如何高效地使用 C# 创建扁平 ZIP 存档。我们演示了将内部 ZIP 存档提取到父 ZIP 的过程,有效避免了嵌套文件夹。如需更多信息,请随时查看 Aspose.ZIP for .NET 文档,或通过我们的 论坛 与我们联系。