在 previous post 中,我讨论了使用 C# 创建 ZIP 档案的不同方法。本文还介绍了如何创建加密和受密码保护的 ZIP 档案。除了ZIP格式,还有一些其他常用的存档格式,如7z、tar、RAR等。其中,7z存档格式是基于开源架构的它用于压缩具有高压缩比的文件和文件夹。它还支持 256 位 AES 加密,并允许加密文件名。在本文中,我将演示如何使用 C# 以编程方式创建 7z (7-Zip) 存档。
本文分为以下几个部分:
本文中的所有步骤和代码示例均基于 Aspose.ZIP for .NET。因此,请确保您已使用以下任一方法安装 API:
- 使用 NuGet 包管理器 安装。
- 下载 DLL and add its reference to the project.
使用 C# 创建 7z (7-Zip) 存档
将文件压缩到 7z 存档中可能有两种可能的情况。要么你只有一个文件,要么可能有一堆文件要压缩。您可以明确地处理这两种情况。
使用单个条目创建 7z 存档
以下是使用单个条目创建 7z 存档的步骤。
- 打开一个新的 FileStream 以创建一个 7z 文件。
- 创建 SevenZipArchive 类的实例。
- 使用 SevenZipArchive.CreateEntry(String, String, Boolean, SevenZipEntrySettings) 方法将文件添加到存档。
- 使用 SevenZipArchive.Save(Stream) 方法创建和保存存档。
以下代码示例展示了如何使用 C# 创建 7z (7-Zip) 存档。
using (FileStream sevenZipFile = File.Open("archive.7z", FileMode.Create))
{
using (var archive = new SevenZipArchive())
{
archive.CreateEntry("data.bin", "file.dat");
archive.Save(sevenZipFile);
}
}
创建包含多个条目的 7z 存档
在这种情况下,您可以将文件放在文件夹中并将文件夹的路径传递给 SevenZipArchive.CreateEntries() 方法。以下是将多个文件条目添加到 7z 存档的步骤。
- 创建 SevenZipArchive 类的实例。
- 将文件夹的路径传递给 SevenZipArchive.CreateEntries(String, Boolean) 方法。
- 调用 SevenZipArchive.Save(String) 方法。
以下代码示例展示了如何使用 C# 创建包含多个条目的 7z 存档。
using (SevenZipArchive archive = new SevenZipArchive())
{
archive.CreateEntries(dataDir);
archive.Save("SevenZip.7z");
}
使用 C# 创建 AES 加密 7z 存档
7z 格式支持 AES 加密来保护文件。为了加密 7z 文件,使用了 SevenZipAESEncryptionSettings 类。以下代码示例展示了如何使用 C# 创建 AES 加密的 7z 存档。
using (var archive = new SevenZipArchive(new SevenZipEntrySettings(null, new SevenZipAESEncryptionSettings("p@s$"))))
{
archive.CreateEntry("data.bin", new MemoryStream(new byte[] { 0x00, 0xFF }));
archive.Save("archive.7z");
}
使用 C# 为 7z 条目设置不同的密码
7z 格式还允许您为每个文件条目指定不同的密码。例如,如果您要压缩 7z 存档中的两个文件,您可以为每个文件指定不同的密码。以下是为 7z 条目设置不同密码的步骤。
- 为 7z 存档文件创建一个新的 FileStream。
- 使用 FileInfo 类访问每个文件条目。
- 创建 SevenZipArchive 类的实例。
- 使用 SevenZipArchive.CreateEntry(String, FileInfo, Boolean, SevenZipEntrySettings) 在 7z 存档中创建条目
- 使用 SevenZipArchive.Save(Stream) 方法保存存档。
以下代码示例显示了如何为 7z 存档中的每个条目设置密码。
using (FileStream sevenZipFile = File.Open("archive.7z", FileMode.Create))
{
FileInfo fi1 = new FileInfo("data1.bin");
FileInfo fi2 = new FileInfo("data2.bin");
FileInfo fi3 = new FileInfo("data3.bin");
using (var archive = new SevenZipArchive())
{
archive.CreateEntry("entry1.bin", fi1, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test1")));
archive.CreateEntry("entry2.bin", fi2, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test2")));
archive.CreateEntry("entry3.bin", fi3, false, new SevenZipEntrySettings(new SevenZipStoreCompressionSettings(), new SevenZipAESEncryptionSettings("test3")));
archive.Save(sevenZipFile);
}
}
结论
在本文中,我们学习了如何使用 C# 以编程方式创建 7z 存档。此外,我们还了解了如何创建 AES 加密的 7z 文件并为每个文件条目设置密码。您可以从 此处 了解有关文件压缩/解压缩的更多信息。