在您的 .NET 应用程序中处理档案时,您可能需要合并多个 ZIP 或 TAR 文件。例如,您可能希望从多个档案中提取文件和文件夹并将它们放入一个档案中。为了实现它,本文介绍了如何在 C# 中合并多个 ZIP 或 TAR 文件。我们将介绍 ZIP 到 ZIP、TAR 到 TAR、ZIP 到 TAR 以及 TAR 到 ZIP 中的合并。
用于合并 ZIP 和 TAR 文件的 C# .NET API
为了合并多个 ZIP 和 TAR 档案,我们将利用 Aspose.ZIP for .NET。它是一个功能丰富的 .NET API,允许您创建和操作各种流行的存档格式。您可以下载 API 的 DLL 或使用 NuGet 直接安装它。
PM> Install-Package Aspose.Zip
在 C# 中合并多个 ZIP 文件
让我们开始将档案与 ZIP 格式合并的旅程。我们将获取两个 ZIP 存档并将它们的条目收集到一个 ZIP 文件中。以下是在 C# 中合并多个 ZIP 文件的步骤。
- 使用 Archive 类加载第一个 ZIP 文件。
- 同样,使用 Archive 类加载第二个 ZIP 文件。
- 现在,使用 Archive.Entries 集合遍历第一个 ZIP 的条目。
- 使用 ArchiveEntry.Open().CopyTo(MemoryStream) 方法将每个 ArchiveEntry 复制到 MemoryStream 对象。
- 使用 Archive.CreateEntry(string, MemoryStream) 方法将条目添加到第二个 ZIP。
- 使用 Archive.Save(string) 方法将合并的 ZIP 保存为单独的文件。
以下代码示例展示了如何在 C# 中合并两个 ZIP 文件。
// 加载源 ZIP 存档
using (Archive sourceArchive = new Archive("Archives/SourceArchive.zip"))
{
// 加载目标 ZIP 存档
using (Archive destArchive = new Archive("Archives/DestinationArchive.zip"))
{
// 遍历条目
foreach (ArchiveEntry entry in sourceArchive.Entries)
{
// 检查是条目不是目录。目录条目会被跳过,但会根据相对路径添加它们的文件。
if (!entry.IsDirectory)
{
// 将条目加载到内存流
MemoryStream mem = new MemoryStream();
entry.Open().CopyTo(mem);
// 将条目添加到目标 ZIP
destArchive.CreateEntry(entry.Name, mem);
}
}
// 单独保存合并的存档
destArchive.Save("Archives/merged-archive.zip");
}
}
在 C# 中合并多个 TAR 文件
现在让我们看看如何在 C# 中合并多个 TAR 档案。以下是实现此目的的步骤。
- 使用 TarArchive 类加载第一个 TAR 文件。
- 同样,使用 TarArchive 类加载第二个 TAR 文件。
- 现在,使用 TarArchive.Entries 集合遍历第一个 TAR 的条目。
- 使用 TarEntry.Open().CopyTo(MemoryStream) 方法将每个 TarEntry 复制到 MemoryStream 对象。
- 使用 TarArchive.CreateEntry(string, MemoryStream) 方法将条目添加到第二个 TAR。
- 使用 TarArchive.Save(string) 方法保存合并的 TAR。
以下代码示例展示了如何在 C# 中合并多个 TAR 文件。
// 加载源 TAR 存档
using (TarArchive sourceArchive = new TarArchive("Archives/SourceArchive.tar"))
{
// 加载目标 TAR 存档
using (TarArchive destArchive = new TarArchive("Archives/DestinationArchive.tar"))
{
// 遍历条目
foreach (TarEntry entry in sourceArchive.Entries)
{
// 检查是条目不是目录。目录条目会被跳过,但会根据相对路径添加它们的文件。
if (!entry.IsDirectory)
{
// 将条目加载到内存流
MemoryStream mem = new MemoryStream();
entry.Open().CopyTo(mem);
// 向目标 TAR 添加条目
destArchive.CreateEntry(entry.Name, mem);
}
}
// 单独保存合并的存档
destArchive.Save("Archives/merged-archive.tar");
}
}
在 C# 中将 ZIP 合并到 TAR 中
在本节中,我们将了解如何在 C# 中将 ZIP 文件合并到 TAR 存档中。以下是执行此操作的步骤。
- 使用 Archive 类加载 ZIP 文件。
- 使用 TarArchive 类加载 TAR 文件。
- 现在,使用 Archive.Entries 集合遍历 ZIP 的条目。
- 使用 ArchiveEntry.Open().CopyTo(MemoryStream) 方法将每个 ArchiveEntry 复制到 MemoryStream 对象。
- 使用 TarArchive.CreateEntry(string, MemoryStream) 方法 . 将条目添加到 TAR
- 使用 TarArchive.Save(string) 方法保存 TAR 文件。
以下代码示例显示了如何将 ZIP 存档合并到 TAR。
// 加载源 ZIP 存档
using (Archive zipArchive = new Archive("Archives/SourceArchive.zip"))
{
// 加载目标 TAR 存档
using (TarArchive tarArchive = new TarArchive("Archives/DestinationArchive.tar"))
{
// 遍历条目
foreach (ArchiveEntry entry in zipArchive.Entries)
{
// 检查是条目不是目录。目录条目会被跳过,但会根据相对路径添加它们的文件。
if (!entry.IsDirectory)
{
// 将条目加载到内存流
MemoryStream mem = new MemoryStream();
entry.Open().CopyTo(mem);
// 向目标 TAR 添加条目
tarArchive.CreateEntry(entry.Name, mem);
}
}
// 单独保存合并的存档
tarArchive.Save("Archives/merged-archive.tar");
}
}
在 C# 中结合 TAR 和 ZIP
与前面的示例类似,您可以将 TAR 文件合并到 ZIP 中。以下代码示例显示了如何从 TAR 中提取文件并将它们合并到 ZIP 中。
// 加载 TAR 存档
using (TarArchive tarArchive = new TarArchive("Archives/SourceArchive.tar"))
{
// 加载 ZIP 存档
using (Archive zipArchive = new Archive("Archives/DestinationArchive.zip"))
{
// 遍历条目
foreach (TarEntry entry in tarArchive.Entries)
{
// 检查是条目不是目录。目录条目会被跳过,但会根据相对路径添加它们的文件。
if (!entry.IsDirectory)
{
// 将条目加载到内存流
MemoryStream mem = new MemoryStream();
entry.Open().CopyTo(mem);
// 将条目添加到 ZIP
zipArchive.CreateEntry(entry.Name, mem);
}
}
// 单独保存合并的存档
zipArchive.Save("Archives/merged-archive.zip");
}
}
获取免费 API 许可证
您可以通过获得 免费临时许可证 来使用 Aspose.ZIP for .NET,而不受评估限制。
结论
在本文中,您学习了如何在 C# 中以编程方式合并多个 ZIP 或 TAR 存档。特别是,我们介绍了如何将 ZIP 文件、TAR 文件、ZIP 合并到 TAR 以及将 TAR 动态合并到 ZIP。要了解更多关于 Aspose.ZIP for .NET 的信息,您可以访问 文档。此外,您可以将您的查询发布到我们的 论坛。