ZIP 档案用于将一个或多个文件或文件夹压缩并保存到单个容器中。 ZIP 存档封装文件和文件夹并保存它们的元数据信息。归档的最常见用途是减小文件的大小以进行存储或传输,并应用加密以确保安全。除了文件压缩工具外,自动压缩/提取功能还用于各种桌面和 Web 应用程序,用于上传、下载、共享或加密文件。本文还针对类似的场景,介绍了一些使用 C# 以编程方式压缩文件或文件夹以及创建 ZIP 存档的简单方法。
在本文中,您将了解如何执行以下 ZIP 归档操作:
C# 压缩库
Aspose.ZIP for .NET 是一个功能强大且易于使用的 API,用于在 .NET 应用程序中压缩或解压缩文件和文件夹。它还提供 AES 加密技术来加密 C# 中 ZIP 中的文件。您可以从 NuGet 安装 API,或从 Downloads 部分下载其二进制文件。
在 C# 中创建 ZIP 存档
以下是通过将文件添加到 ZIP 存档来压缩文件的步骤:
- 为输出 ZIP 存档创建一个 FileStream 对象。
- 将源文件打开到 FileStream 对象中。
- 创建一个 Archive 类的对象。
- 使用 Archive.CreateEntry(string, FileStream) 方法将文件添加到存档中。
- 使用 Archive.Save(FileStream) 方法创建 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# 中压缩文件夹的步骤:
- 为输出 ZIP 存档创建 FileStream 类的对象。
- 创建 Archive 类的实例。
- 使用 DirectoryInfo 类指定要压缩的文件夹。
- 使用 Archive.CreateEntries(DirectoryInfo) 方法将文件夹添加到 ZIP 中。
- 使用 Archive.Save(FileStream) 方法创建 ZIP 存档。
以下代码示例显示了如何在 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 存档。此外,最后还讨论了多个条目的并行压缩。如果您有任何问题或疑问,可以通过我们的 论坛 向我们提问。