いろいろ備忘録日記

主に .NET と Python絡みのメモを公開しています。

.NET クラスライブラリ探訪-062 (System.IO.Compression.ZipFile (1), .NET 4.5から追加, ZIPファイルの圧縮/解凍)


今回は、System.IO.Compression.ZipFileクラスについてちょこっとメモメモ。


ZipFileクラスは.NET Framework 4.5から追加された型です。
文字通り、ZIP形式のファイルを扱うためのクラスです。4.5になって、やっと追加されました。
これが追加されるまでは、J#のライブラリ使ったり、ShellのCopyHereを使ったり、DotNetZip使ったりいろいろありましたが、それはさておき...。


このクラスを利用するためには

System.IO.Compression.FileSystem.dll

を参照設定に追加する必要があります。


また、このクラスはMetro (新しい名前はWindows 8スタイルUI ??)では利用できません。
Metroでは、同じ機能を持つZipArchiveクラスを利用する必要があります。


利用方法は簡単で、シンプルに圧縮と解凍をするだけなら、以下の2つのメソッドで事足ります。

// 圧縮
public static void CreateFromDirectory(string, string)
// 解凍
public static void ExtractToDirectory(string, string)


以下サンプルです。

  #region ZipFileSamples-01
  /// <summary>
  /// System.IO.Compression.ZipFileクラスのサンプルです。
  /// </summary>
  /// <remarks>
  /// ZipFileクラスは、.NET Framework 4.5で追加されたクラスです。
  /// このクラスを利用するには、「System.IO.Compression.FileSystem.dll」を
  /// 参照設定に追加する必要があります。
  /// </remarks>
  public class ZipFileSamples01 : IExecutable
  {
    public void Execute()
    {
      //
      // ZipFileクラスは、ZIP形式のファイルを扱うためのクラスである。
      // 同じ事が出来るクラスとして、ZipArchiveクラスが存在するが
      // こちらは、きめ細かい処理が行えるクラスとなっており
      // ZipFileクラスは、ユーティリティクラスの扱いに近い。
      //
      // ZipFileクラスに定義されているメソッドは、全てstaticメソッドとなっている。
      //
      // 簡単に圧縮・解凍するためのメソッドとして
      //   ・CreateFromDirectory(string, string)
      //   ・ExtractToDirectory(string, string)
      // が用意されている。
      //
      // 尚、このクラスはMetroスタイルアプリ (新しい名前はWindows 8スタイルUI?)
      // では利用できないクラスである。Metroでは、ZipArchiveを利用することになる。
      // (http://msdn.microsoft.com/en-us/library/system.io.compression.zipfile)
      //
      
      //
      // 圧縮.
      //
      string srcDirectory = Environment.CurrentDirectory;
      string dstDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
      string dstFilePath  = Path.Combine(dstDirectory, "ZipTest.zip");
      
      if (File.Exists(dstFilePath))
      {
        File.Delete(dstFilePath);
      }
      
      ZipFile.CreateFromDirectory(srcDirectory, dstFilePath);
      
      //
      // 解凍.
      //
      string extractDirectory = Path.Combine(dstDirectory, "ZipTest");
      if (Directory.Exists(extractDirectory))
      {
        Directory.Delete(extractDirectory, recursive: true);
        Directory.CreateDirectory(extractDirectory);
      }
      
      ZipFile.ExtractToDirectory(dstFilePath, extractDirectory);
    }
  }
  #endregion


実行すると、カレントディレクトリの内容を圧縮して、デスクトップに出力します。
その後、出力したZipファイルを解凍しています。


以下、参考資料です。

================================
過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。