ZIP存档用于将一个或多个文件或文件夹压缩并保存到单个容器中。 ZIP归档文件封装了文件和文件夹,并保存了它们的元数据信息。 归档的最常见用法是减小用于存储或传输的文件的大小,并应用加密技术以提高安全性。 除文件压缩工具外,各种桌面和Web应用程序还使用自动压缩/提取功能来上载,下载,共享或加密文件。 本文还针对类似的情况,并提供了一些简单的方法来压缩文件或文件夹,并使用C#以编程方式创建ZIP存档。
在本文中,您将学习如何执行以下ZIP归档操作:
先决条件– C#ZIP库
Aspose.ZIP for .NET 是一个功能强大且易于使用的API,用于在.NET应用程序中压缩或解压缩文件和文件夹。 它还提供AES加密技术来加密ZIP存档中的文件。您可以从NuGet 安装API或从“下载”部分下载其二进制文件。
在C#中创建一个ZIP存档
以下是通过将文件添加到ZIP归档文件来压缩文件的步骤:
为输出ZIP存档创建FileStream对象。 将源文件打开到FileStream对象中。 创建一个Archive类的对象。 使用Archive.CreateEntry(string,FileStream)方法将文件添加到存档中。 使用Archive.Save(FileStream)方法创建ZIP存档。
下面的代码示例演示如何使用C#将文件添加到ZIP存档中。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 为输出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);
// ZIP文件
archive.Save(zipFile);
}
}
}
View the code on Gist .
在C#中将多个文件添加到ZIP存档中
如果要将多个文件添加到ZIP存档中,则可以使用以下方式之一进行操作。
使用FileStream压缩多个文件
在此方法中,FileStream类用于使用Archive.CreateEntry(String,FileStream)方法将文件添加到ZIP存档中。 下面的代码示例演示如何在C#中将多个文件添加到ZIP中。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 为输出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" });
}
}
}
}
View the code on Gist .
使用FileInfo压缩多个文件
您也可以使用FileInfo类将多个文件添加到ZIP存档中。 在此方法中,将使用FileInfo类加载文件,并使用Archive.CreateEntry(String,FileInfo)方法将其添加到ZIP存档中。 下面的代码示例演示如何使用C#中的FileInfo类对多个文件进行ZIP处理。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 为输出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 });
}
}
View the code on Gist .
使用路径的ZIP文件
您可以将文件的路径直接提供给Archive.CreateEntry(String name,String path,Boolean openImmediately,ArchiveEntrySettings newEntrySettings)方法,而不是使用ZIPInfo的FileInfo或FileStream类。 下面的代码示例显示如何使用文件的路径对ZIP文件进行压缩。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 为输出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);
}
}
View the code on Gist .
将文件夹添加到C#中的ZIP存档中
您也可以对文件夹进行ZIP压缩,这可能是将多个文件添加到ZIP存档的另一种选择。 只需将源文件放入一个文件夹中,然后将该文件夹添加到ZIP存档中。 以下是压缩文件夹的步骤:
为输出ZIP存档创建FileStream类的对象。 创建一个Archive类的实例。 使用DirectoryInfo类指定要压缩的文件夹。 使用Archive.CreateEntries(DirectoryInfo)方法将文件夹添加到ZIP中。 使用Archive.Save(FileStream)方法创建ZIP存档。
下面的代码示例演示如何在C#中将文件夹添加到ZIP。
在C#中使用ZipCrypto创建受密码保护的ZIP存档
您可以使用密码保护ZIP存档并应用ZipCrypto加密。 为此,在存档的构造函数中使用ArchiveEntrySettings类,该构造函数接受加密类型作为第二个参数。
以下代码示例显示了如何在C#中使用ZipCrypto创建受密码保护的ZIP存档。
在C#中创建AES加密的ZIP存档
用于.NET的Aspose.ZIP还允许您将AES加密应用于ZIP存档。 您可以使用以下AES加密方法:
为了应用AES加密,API提供了AesEcryptionSettings类。 以下代码示例显示了如何在C#中创建AES加密的ZIP存档。
设定平行压缩模式
如果有多个条目,您还可以将API配置为并行压缩。 为此,您可以使用ParallelOptions类指定并行压缩模式。 .NET的Aspose.ZIP提供以下并行压缩模式。
从不–请勿并行压缩。 始终–并行压缩(请注意内存不足)。 自动–确定是否对条目使用并行压缩。 此选项可能仅并行压缩某些条目。
以下代码示例显示了在压缩多个文件时如何设置并行压缩模式。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 有关完整的示例和数据文件,请访问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"
});
}
}
}
}
View the code on Gist .
了解有关.NET的Aspose.ZIP的更多信息
使用以下资源探索有关我们的C#ZIP API的更多信息: