【ハウツー】

C#でZIPファイルを扱えるDotNetZip

1 .NETで書庫を作成、圧縮

    青木淳夫  [2009/08/21]

    はじめに

    サイズが大きいファイルを扱うアプリケーションでは、ZIP形式にてファイルを圧縮できると便利です。そこで本稿ではDotNetZipというライブラリを紹介します。

    DotNetZipを利用すると、.NET環境でZIPファイルを容易に作成し、解凍できるようになります。DotNetZipには高度な機能(パスワード設定、自己解凍書庫、圧縮レベル設定、ZIP64、AES-256bit暗号化等)が備わっているため、ZIPファイルに対する様々な操作を行えるようになります。

    DotNetZipとは

    DotNetZipはCodePlexにて、オープンソース(Ms-PLライセンス)として開発されています。.NET (Compact) Framework2.0以上の環境で動作するため、ASP.NET、Windowsフォーム、スマートデバイス等の開発で使用できます。

    DotNetZipのWebサイト

    DotNetZipはCodeplexから入手できます。ダウンロードできるファイルの種類は次の通りです。

    ダウンロードファイルの種類(執筆時点の最新バージョンは1.8)

    ファイル名 説明
    DotNetZip-src-v1.8.x.x.zip ソースコードとサンプルコード
    DotNetZipLib-DevKit-v1.8.zip デバッグ&リリースDLL、XML Document
    DotNetZipLib-Runtime-v1.8.zip(msi) リリースDLL
    DotNetZipUtils-v1.8.zip(msi) ユーティリティアプリケーション
    DotNetZipLib-v1.8.chm ヘルプファイル

    DotNetZipはC#、VB.NET、IronPython、PowerShellといった.NET対応言語で利用できます。「DotNetZipLib-Runtime-v1.8.msi」にてインストールすれば、PHP、Perl、VBScript(ASP)、JavaScript、Visual Basic、VBAからも利用できます(詳細はヘルプファイルの「DotNetZip can be used from COM Environments」をご覧ください)。 また「DotNetZipUtils-v1.8.msi」は、DotNetZipの実装サンプルとして参考になるでしょう。

    DotNetZipUtils(ユーティリティアプリケーション)

    ZIPファイルを作成する

    それでは、Windowsアプリケーションのコード例を見ていきましょう。本稿では「DotNetZipLib-Runtime-v1.8.zip」をダウンロードし、DotNetZip-v1.8フォルダの「Ionic.Zip.dll」に参照設定を行っています。このDLLには、Zipファイルを操作する機能(Ionic.Zip名前空間)とデータの圧縮伸張を行うZlibの.NET版(Ionic.Zlib名前空間)が含まれています。

    次のコードを実行すると、「ファイル1.txt」と「ファイル2.bmp」を圧縮した「サンプル.zip」が生成されます。

    ZIPファイルを生成するコード(C#)

    //クラスの先頭で名前空間をインポート
    using Ionic.Zip;
    using Ionic.Zlib;
    (中略)
    private void button1_Click(object sender, EventArgs e)
    {
      try
      {
        //(1)ZIPクラスをインスタンス化
        using (ZipFile zip = new ZipFile(Encoding.GetEncoding("shift_jis")))
        {
          //(2)圧縮レベルを設定
          zip.CompressionLevel = CompressionLevel.BestCompression;
    
          //(3)ファイルを追加
          zip.AddFile(@"C:\ZipSample\ファイル1.txt");
          //ファイルを追加(画像フォルダ)
          zip.AddFile(@"C:\ZipSample\ファイル2.bmp", "画像");
    
          //(4)ディレクトリを追加する場合
          //zip.AddDirectory(@"C:\追加したいフォルダ");
    
          //(5)ZIPファイルを保存
          zip.Save(@"C:\ZipSample\サンプル.zip");
        }
      }
      catch (Exception ex)
      {
        MessageBox.Show(ex.Message,"ZIP作成失敗");
      }
    }
    

    生成されるZIPファイルの階層は下図の通りです。

    ZIPファイルの階層

    プログラムの流れを順に見ていきましょう。

    (1)最初にZipFileクラスをインスタンス化します。日本語ファイル名を扱うためコンストラクタにてエンコーディング「shift_jis」を指定しています。ZipFileクラスは名前の通り、ZIPファイル(書庫そのもの)を表すクラスです。

    (2)次に圧縮方法を指定します。CompressionLevelにて、None(圧縮なし)、BestSpeed(速度最優先)、Default(速度と圧縮率のバランス)、BestCompression(圧縮率最優先)、Level0-9(圧縮なし-圧縮率最優先)を選択できます。

    ここではBestCompressionを選んだため、2Mのビットマップファイルが60Kに圧縮されました。Windows標準機能を使って圧縮した場合は65K程度だったため、まずまずの圧縮率と言えるでしょう。

    (3)続けて、書庫に追加するファイルをAddFileメソッドで指定します。第2引数にて書庫内のパスを指定することもできます。例えば、""と指定すると書庫のルートに配置されます。第2引数を指定しない場合は、元のフォルダ構成で配置されます。

    (4)もしファイルを個々に指定するのではなく、ディレクトリごとに指定したい場合は、AddDirectoryメソッドを使用します。

    (5)最後にSaveメソッドを呼び出します。ここで指定したパスにZIPファイルが出力されます。

    関連したタグ

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン