zipファイルを解凍・展開する

C#でzipファイルを解凍する方法は幾つかあるようですが
以下の条件で絞って探してみました。

・Framework2.0以降で利用できること
・とにかく簡単なこと
・J#などに依存しないこと

2011年7月の現時点ではオープンソースで開発されている
DotNetZip ライブラリを利用するのがお手軽そうです。

まずは DotNetZip のサイトより
必要なランタイムDLLをダウンロードしてください。

DotNetZipトップページはこちら

トップページを開いたら Downloads タブを選択します。
ファイルが何種類か並んでいますが
とりあえず必要なのはランタイムのみなので

DotNetZipLib-Runtime-v1.9.zip

のようにランタイムが圧縮されたファイルをダウンロードし
適当なフォルダに解凍してください。
(バージョン番号やファイル名は今後変更されると思います)

展開すると以下のような階層で色々入っていますが
開発に必要なのは※印の付いた
DotNetZip-v1.9 フォルダの Ionic.Zip.dll ファイルです。

    │  Contents.txt
    │  License.txt
    │  PleaseDonate.txt
    │  Readme.txt
    │
    ├─DotNetZip-Reduced-v1.9
    │      Ionic.Zip.Reduced.dll
    │      Readme.txt
    │
    ├─DotNetZip-v1.9
    │      Ionic.Zip.dll ※これを使います
    │      Readme.txt
    │
    ├─DotNetZip-v1.9-CompactFramework
    │      Ionic.Zip.CF.dll
    │      Readme.txt
    │
    ├─zlib-v1.9
    │      Ionic.Zlib.dll
    │      Readme.txt
    │
    └─Zlib-v1.9-CompactFramework
            Ionic.Zlib.CF.dll
            Readme.txt

次に、Ionic.Zip.dll ファイルを
プロジェクトの参照設定に追加してください。

やり方は幾つかありますが
1.ソリューションエクスプローラーの参照設定を右クリックして参照の追加
2.参照の追加Dialogが開いたら参照タブより上記ファイルを選択

あとは下記サンプルコードを参考にしてください。
数行のコードで解凍が可能です。

もちろん、アプリを実行する際は
Ionic.Zip.dll ランタイムも必要になるのでお忘れなく。
ライセンスも最新情報を確認しましょう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ionic.Zip;    // usingを忘れずに
using Ionic.Zlib;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // zipファイル読み込み
            ZipFile zip = new ZipFile(@"c:\sample.zip", Encoding.GetEncoding("shift_jis"));

            // 展開する。すでにあれば上書きする。
            zip.ExtractAll(@"c:\", ExtractExistingFileAction.OverwriteSilently);

            // 後始末。面倒ならusingしておいてもおk
            zip.Dispose();
        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)