用于压缩文件格式的 C# .NET 库
开源免费 .NET API,适用于 ZIP、GZIP、TAR 和 BZIP2 等文件归档格式。
SharpZipLib 入门
您需要具有 .NET Framework 4.5 或更高版本才能配置 SharpZipLib。满足先决条件后,您可以从 GitHub 手动下载存储库,或直接从 NuGet 获取程序集。
安装 SharpZipLib 的推荐方法来自 NuGet,因为它以 NuGet 包 的形式提供。
从 NuGet 安装 SharpZipLib
Install-Package SharpZipLib
NET 库来创建和提取 ZIP 文件
SharpZipLib 使软件开发人员能够在他们自己的 .NET 应用程序中创建 ZIP 文件。开发人员可以轻松地压缩目录中的所有可用文件,并将它们分配到单个 zip 文件中。 ZIP 是最流行的压缩文件格式之一,它为用户提供了减小文件大小的便利。该 API 还支持将 ZIP 文件的内容提取到用户选择的位置
从 ZIP 中提取文件 - C#
// Open zip file
using (Stream fsInput = File.OpenRead("D:\\input.zip"))
using (var zf = new ZipFile(fsInput))
{
// Set password if required
zf.Password = "12345";
// Unzip data
foreach (ZipEntry zipEntry in zf)
{
if (!zipEntry.IsFile)
{
// Ignore directories
continue;
}
String entryFileName = zipEntry.Name;
var directoryName = "D:\\output\\test";
if (directoryName.Length > 0)
{
Directory.CreateDirectory(directoryName);
}
var buffer = new byte[4096];
using (var zipStream = zf.GetInputStream(zipEntry))
using (Stream fsOutput = File.Create("data.zip"))
{
StreamUtils.Copy(zipStream, fsOutput, buffer);
}
}
}
创建受密码保护的 ZIP 文件
SharpZipLib 使软件开发人员能够将文件夹内的所有文件压缩为 ZIP 文件并为创建的文件定义密码。如果您想创建没有保护的 ZIP 文件,请将其值设置为 null 或不要声明它使文件没有任何密码保护。它支持大量文件。
创建受密码保护的 ZIP 文件 - C#
// Create a new ZIP file
using (FileStream fsOut = File.Create("D:\\output.zip"))
using (var zipStream = new ZipOutputStream(fsOut))
{
//0-9, 9 being the highest level of compression
zipStream.SetLevel(3);
// Set password
zipStream.Password = "12345";
// Add files
var files = Directory.GetFiles("D:\\sample");
foreach (var filename in files)
{
var fi = new FileInfo(filename);
// Make the name in zip based on the folder
var entryName = filename.Substring(1);
// Remove drive from name and fixe slash direction
entryName = ZipEntry.CleanName(entryName);
var newEntry = new ZipEntry(entryName);
// Note the zip format stores 2 second granularity
newEntry.DateTime = fi.LastWriteTime;
newEntry.Size = fi.Length;
zipStream.PutNextEntry(newEntry);
var buffer = new byte[4096];
using (FileStream fsInput = File.OpenRead(filename))
{
StreamUtils.Copy(fsInput, zipStream, buffer);
}
zipStream.CloseEntry();
}
}