在 C# 中创建平面 ZIP 存档

介绍

管理 ZIP 文件可能具有挑战性,特别是当它们包含 嵌套存档 时。本指南将引导您通过使用 Aspose.ZIP for .NET 提取所有 内部 ZIP 存档到一个单一存档 的过程,从而 扁平化 ZIP 结构

为什么创建平面 ZIP?

创建平面 ZIP 存档有几个优点:

  • 简化 ZIP 文件管理:处理多个文件时减少复杂性。
  • 将所有嵌套 ZIP 内容提取到一个存档中:整合文件以便于访问。
  • 减少冗余文件夹结构:简化文件的组织。

目录

  1. 在 C# 中设置 ZIP 存档处理
  2. 创建平面 ZIP 存档的步骤
  3. 保存扁平化的 ZIP 文件
  4. 批量处理多个 ZIP 存档
  5. 获取免费 API 许可证
  6. 结论和附加资源

1. 在 C# 中设置 ZIP 存档处理

为了有效处理 嵌套 ZIP 存档,我们将利用 Aspose.ZIP for .NET。这个强大的库提供:

  • 自动 ZIP 提取和重新压缩
  • 支持多种存档格式:ZIP、TAR、GZip 等。
  • 高效处理 大型存档。

安装

您可以通过 NuGet 轻松安装该库:

PM> Install-Package Aspose.Zip

或者,您可以从 Aspose 下载页面 下载 DLL。


2. 创建平面 ZIP 存档的步骤

考虑以下 嵌套 ZIP 结构

parent.zip
 ├ first.txt
 ├ inner.zip
 │ ├ file1.exe
 │ └ data.bin
 └ picture.gif

扁平化后,所有内部 ZIP 内容将合并到父 ZIP 中:

flattened.zip
 ├ first.txt
 ├ picture.gif
 ├ file1.exe
 └ data.bin

代码示例

以下是如何自动提取嵌套 ZIP 文件:

// 加载父 ZIP 文件
using (Archive parentZip = new Archive("parent.zip"))
{
    List<ArchiveEntry> toDelete = new List<ArchiveEntry>();
    List<string> newEntryNames = new List<string>();
    List<MemoryStream> newStreams = new List<MemoryStream>();

    foreach (ArchiveEntry entry in parentZip.Entries)
    {
        if (entry.Name.EndsWith(".zip", StringComparison.OrdinalIgnoreCase))
        {
            toDelete.Add(entry);
            using (MemoryStream zipStream = new MemoryStream())
            {
                entry.Open().CopyTo(zipStream);
                zipStream.Position = 0;
                using (Archive innerZip = new Archive(zipStream))
                {
                    foreach (ArchiveEntry innerEntry in innerZip.Entries)
                    {
                        using (MemoryStream entryStream = new MemoryStream())
                        {
                            innerEntry.Open().CopyTo(entryStream);
                            newEntryNames.Add(innerEntry.Name);
                            newStreams.Add(entryStream);
                        }
                    }
                }
            }
        }
    }

    foreach (var entry in toDelete)
        parentZip.DeleteEntry(entry);

    for (int i = 0; i < newEntryNames.Count; i++)
        parentZip.CreateEntry(newEntryNames[i], newStreams[i]);

    parentZip.Save("flattened.zip");
}

此方法有效地 自动化嵌套 ZIP 文件提取,确保顺畅的工作流程。


3. 保存扁平化的 ZIP 文件

提取嵌套 ZIP 内容后,使用以下代码行保存扁平化的 ZIP 文件:

parentZip.Save("flattened.zip");

这确保您拥有一个 没有嵌套文件夹的单一 ZIP 存档,使文件管理变得更加简单。


4. 批量处理多个 ZIP 存档

如果您需要 扁平化特定文件夹中的多个 ZIP 存档,可以使用以下代码片段:

string[] files = Directory.GetFiles("zip_folder", "*.zip");
foreach (string file in files)
{
    using (Archive archive = new Archive(file))
    {
        archive.ExtractToDirectory("output_folder");
    }
}

此方法允许 自动批量 ZIP 处理,为您节省时间和精力。


5. 获取免费 API 许可证

要解锁 Aspose.ZIP全部功能,您可以请求 免费临时许可证

有关全面的文档,请访问 Aspose.ZIP 指南。如果您有任何问题,请随时与 Aspose 论坛 的社区交流。


6. 结论和附加资源

总结

在本指南中,我们涵盖了:

如何在 C# 中扁平化 ZIP 文件
提取嵌套 ZIP 存档
保存最终的 ZIP 存档
一次处理多个 ZIP 文件

使用 Aspose.ZIP for .NET,您可以高效地 提取和管理 ZIP 存档 在您的应用程序中。开始 优化您的 ZIP 处理工作流程 吧!