在 C# 中创建 ZIP

ZIP 档案用于将一个或多个文件或文件夹压缩并保存到单个容器中。 ZIP 存档封装文件和文件夹并保存它们的元数据信息。归档的最常见用途是减小文件的大小以进行存储或传输,并应用加密以确保安全。除了文件压缩工具外,自动压缩/提取功能还用于各种桌面和 Web 应用程序,用于上传、下载、共享或加密文件。本文还针对类似的场景,介绍了一些使用 C# 以编程方式压缩文件或文件夹以及创建 ZIP 存档的简单方法。

在本文中,您将了解如何执行以下 ZIP 归档操作:

C# 压缩库

Aspose.ZIP for .NET 是一个功能强大且易于使用的 API,用于在 .NET 应用程序中压缩或解压缩文件和文件夹。它还提供 AES 加密技术来加密 C# 中 ZIP 中的文件。您可以从 NuGet 安装 API,或从 Downloads 部分下载其二进制文件。

在 C# 中创建 ZIP 存档

以下是通过将文件添加到 ZIP 存档来压缩文件的步骤:

以下代码示例展示了如何使用 C# 将文件添加到 ZIP 存档中。

// 为输出 ZIP 存档创建 FileStream
using (FileStream zipFile = File.Open("compressed_file.zip", FileMode.Create))
{
	// 要添加到存档的文件
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		using (var archive = new Archive(new ArchiveEntrySettings()))
		{
			// 将文件添加到存档
			archive.CreateEntry("alice29.txt", source1);
			// 压缩文件
			archive.Save(zipFile);
		}
	}
}

在 C# 中将多个文件添加到 ZIP 存档中

如果您想将多个文件添加到 ZIP 存档中,您可以使用以下方法之一来完成。

C# 使用 FileStream 压缩多个文件

在此方法中,FileStream 类用于使用 Archive.CreateEntry(String, FileStream) 方法将文件添加到 ZIP 存档。以下代码示例展示了如何在 C# 中将多个文件添加到 ZIP 中。

// 为输出 ZIP 存档创建 FileStream
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// 要添加到存档的文件
	using (FileStream source1 = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
	{
		// 要添加到存档的文件
		using (FileStream source2 = File.Open("asyoulike.txt", FileMode.Open, FileAccess.Read))
		{
			using (var archive = new Archive())
			{
				// 将文件添加到存档
				archive.CreateEntry("alice29.txt", source1);
				archive.CreateEntry("asyoulik3.txt", source2);
				// 压缩文件
				archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII, ArchiveComment = "two files are compressed in this archive" });
			}
		}
	}
}

C# 使用 FileInfo 压缩多个文件

您还可以使用 FileInfo 类将多个文件添加到 ZIP 存档中。在此方法中,文件将使用 FileInfo 类加载并使用 Archive.CreateEntry(String, FileInfo) 方法添加到 ZIP 存档中。以下代码示例展示了如何使用 C# 中的 FileInfo 类压缩多个文件。

// 为输出 ZIP 存档创建 FileStream
using (FileStream zipFile = File.Open("compressed_files.zip", FileMode.Create))
{
	// 要添加到存档的文件
	FileInfo fi1 = new FileInfo("alice29.txt");
	FileInfo fi2 = new FileInfo("fields.c");

	using (var archive = new Archive())
	{
		// 将文件添加到存档
		archive.CreateEntry("alice29.txt", fi1);
		archive.CreateEntry("fields.c", fi2);
		// 创建 ZIP 存档
		archive.Save(zipFile, new ArchiveSaveOptions() { Encoding = Encoding.ASCII });
	}
}

使用路径的 ZIP 文件

您可以将文件的路径直接提供给 Archive.CreateEntry(String name, String path, Boolean openImmediately, ArchiveEntrySettings newEntrySettings) 方法,而不是对 ZIP 条目使用 FileInfo 或 FileStream 类。以下代码示例显示了如何使用其路径压缩文件。

// 为输出 ZIP 存档创建 FileStream
using (FileStream zipFile = File.Open("archive.zip", FileMode.Create))
{
    // 创建存档
    using (var archive = new Archive())
    {
        // 将文件添加到 ZIP 存档
        archive.CreateEntry("data.bin", "file.dat");
        archive.Save(zipFile);
    }
}

在 C# 中将文件夹添加到 ZIP 存档

您可以使用 C# ZIP 库压缩文件夹,这可能是向 ZIP 存档添加多个文件的另一种选择。只需将源文件放入一个文件夹,然后将该文件夹添加到 ZIP 存档中。以下是在 C# 中压缩文件夹的步骤:

以下代码示例显示了如何在 C# 中将文件夹添加到 ZIP。

// 为输出 ZIP 存档创建 FileStream
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive())
	{
		// 要压缩的文件夹
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// 创建 ZIP 存档
		archive.Save(zipFile);
	}
}

在 C# 中使用 ZipCrypto 创建受密码保护的 ZIP

您可以使用密码保护 ZIP 档案并应用 ZipCrypto 加密。为此,ArchiveEntrySettings 类用于 Archive 的构造函数,它接受加密类型作为第二个参数。

以下代码示例展示了如何在 C# 中使用 ZipCrypto 创建受密码保护的 ZIP 存档。

// 为输出 ZIP 存档创建 FileStream
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
	{
		// 将文件夹添加到存档
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// 创建 ZIP 存档
		archive.Save(zipFile);
	}
}

C# 使用 AES 加密创建受密码保护的 ZIP

Aspose.ZIP for .NET 还允许您应用 AES 加密来保护 ZIP 档案。您可以使用以下 AES 加密方法:

  • AES128
  • AES192
  • AES256

为了应用 AES 加密,API 提供了 AesEcryptionSettings 类。以下代码示例展示了如何在 C# 中使用 AES 加密创建受密码保护的 ZIP。

// 为输出 ZIP 存档创建 FileStream
using (FileStream zipFile = File.Open("compress_directory.zip", FileMode.Create))
{
	using (Archive archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
	{
		// 将文件夹添加到存档
		DirectoryInfo corpus = new DirectoryInfo("CanterburyCorpus");
		archive.CreateEntries(corpus);
		// 创建 ZIP 存档
		archive.Save(zipFile);
	}
}

设置并行压缩模式

如果有多个条目,您还可以配置 API 以进行并行压缩。为此,您可以使用 ParallelOptions 类指定并行压缩模式。 Aspose.ZIP for .NET 提供以下并行压缩模式。

  • 从不 - 不要并行压缩。
  • 始终 - 并行压缩(注意内存不足)。
  • 自动 - 决定是否对条目使用并行压缩。此选项可能仅并行压缩某些条目。

以下代码示例展示了如何在使用 Aspose 的 C# ZIP 库压缩多个文件时设置并行压缩模式。

// 如需完整的示例和数据文件,请访问 https://github.com/aspose-zip/Aspose.ZIP-for-.NET
using (FileStream zipFile = File.Open(dataDir + "UsingParallelismToCompressFiles_out.zip", FileMode.Create))
{
    using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
    {
        using (FileStream source2 = File.Open(dataDir + "asyoulik.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive())
            {
                archive.CreateEntry("alice29.txt", source1);
                archive.CreateEntry("asyoulik.txt", source2);
                //定义并行度标准
                var parallelOptions = new ParallelOptions
                {
                    ParallelCompressInMemory = ParallelCompressionMode.Always
                };
                archive.Save(zipFile,
                    new ArchiveSaveOptions()
                    {
                        ParallelOptions = parallelOptions,
                        Encoding = Encoding.ASCII,
                        ArchiveComment = "There are two poems from Canterbury corpus"
                    });
            }
        }
    }
}

了解有关 C# .NET ZIP 库的更多信息

使用以下资源进一步了解我们的 C# ZIP API:

结论

在本文中,您学习了如何在 C# 中以编程方式创建 ZIP 存档。代码示例演示了如何在 ZIP 存档中添加文件和文件夹。此外,我们还介绍了如何使用 C# Aspose 的 ZIP 库使用 ZipCrypto 和 AES 加密方法创建受密码保护的 ZIP 存档。此外,最后还讨论了多个条目的并行压缩。如果您有任何问题或疑问,可以通过我们的 论坛 向我们提问。

也可以看看

使用 C# 解压缩或提取文件使用 C# 解压缩 ZIP 档案中的文件在 C# .NET 中创建 7z (7-Zip) 档案
[在 C# .NET 中打开或提取 7z (7zip) 文件](https://blog.aspose.com/zh/2021/04/28/open-extract-7zip-7z-file-unzip-in-csharp-asp-net /)使用 C# 创建和提取 GZip 档案在 C# 中将 RAR 文件转换为 ZIP 存档
在 C# 中将 ZIP 存档转换为 TAR在 C# 中创建平面 ZIP 存档在 C# 中创建可执行的自解压存档
在 C# 中创建 TAR.GZ 和 TAR.XZ 文件在 C# 中删除 ZIP 存档中的文件在 C# 中提取嵌套的 ZIP 档案
在 C# 中合并多个 ZIP 或 TAR 档案