1. 製品
  2.   圧縮
  3.   .NET
  4.   SharpZipLib
 
  

圧縮ファイル形式用の C# .NET ライブラリ

ZIP、GZIP、TAR、BZIP2 などのファイル アーカイバ形式用のオープン ソースの無料 .NET API。

SharpZipLib ライブラリは、.NET プラットフォーム用に完全に C# で記述されています。アセンブリとして実装されるため、他のプロジェクト (任意の .NET 言語) に組み込むことができます。

GZIP および ZIP 圧縮を必要とする SharpDevelop で使用できるように、もともと GNU Classpath java.util.zip ライブラリから移植されたものです。その後、ユーザーの要望が高かったため、BZIP2 および Tar アーカイブもライブラリに含まれました。

Previous Next

SharpZipLib を使い始める

SharpZipLib を設定するには、.NET Framework 4.5 以降が必要です。前提条件が満たされたら、GitHub からリポジトリを手動でダウンロードするか、NuGet からアセンブリを直接取得できます。

SharpZipLib をインストールする推奨される方法は、NuGet パッケージとして利用できる NuGet からです。 

NuGet から SharpZipLib をインストールする

 Install-Package SharpZipLib

ZIP ファイルを作成および抽出するための NET ライブラリ

SharpZipLib を使用すると、ソフトウェア開発者は独自の .NET アプリケーション内で ZIP ファイルを作成できます。開発者は、ディレクトリ内で使用可能なすべてのファイルを簡単に圧縮し、それらを 1 つの zip ファイルに割り当てることができます。 ZIP は最も一般的な圧縮ファイル形式の 1 つであり、ユーザーはファイルのサイズを縮小することができます。この 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();
  }
}
 日本