1. 产品
  2.   压缩
  3.   .NET
  4.   SharpZipLib
 
  

用于压缩文件格式的 C# .NET 库

开源免费 .NET API,适用于 ZIP、GZIP、TAR 和 BZIP2 等文件归档格式。

SharpZipLib 库完全用 C# 编写,用于 .NET 平台。它以程序集的形式实现,因此您可以将其合并到其他项目中(使用任何 .NET 语言)。

它最初是从 GNU Classpath java.util.zip 库移植的,因此它可以与需要 GZIP 和 ZIP 压缩的 SharpDevelop 一起使用。后来由于用户的高需求,BZIP2 和 Tar 归档也包含在库中。

Previous Next

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();
  }
}
 中国人