ついに解禁!.NET で ZIP 制御


はじめまして。Platform SDK (Windows SDK) サポートの miezure です。

UI や Azure などを担当しています。今回初めてブログを書かせていただくことになりました。みなさまに有益な情報をご案内

できるようがんばります!!どうぞ、よろしくお願いします。

さてさて、3 月も終わりそうな今日この頃ですが、ついに先日 (3/21)、高知市の が開花したそうです。お花見の季節到来

ですね。毎年桜の開花宣言って誰かがじっと見ていて、咲いたぞー!とかやっているのかな、と疑問に思うところですが、こちら

東京の桜の開花予想は平年より 4 ~ 6 日ほど遅く、4 月 1 日くらいだそうです。しかも 4 月からやっと暖かくなる予想なよう

です。桜満開のあたたかい季節到来に、はやくもテンションがあがったところで、本題に突入させていただきます。

 

ZIP ファイルの制御について

今回のテーマは、ついに解禁! ZIP ファイルの制御 でございます。ご存知のかたも多いとは思いますが、Windows として

プログラムから ZIP ファイルを制御する方法はご用意しておりませんでした。

あれ? CopyHere メソッドを使用して制御できるけど。。というかた、さすがです。確かにエクスプローラーが Shell の API を

利用している関係上、CopyHere メソッドでも ZIP ファイルを扱うことが可能となっています。

ただこれは、意図して提供している機能ではないのです。そのため、CopyHere メソッドによる ZIP の制御で問題が発生した

というお問い合わせが多く、弊社ではこちらの技術情報を公開しています。

 

CopyHere メソッドから Zip ファイルを処理することはできません

http://support.microsoft.com/kb/2679832/ja

 

しかし、ついに今回、.NET Framework の最新版である .NET Framework 4.5 にて、ZIP ファイルを処理するためのクラスが

追加されました!やったー。

その名も、ZipArchive クラスZipArchiveEntry クラスZipFile クラスZipFileEstensions クラスの 4 人衆です。

名前空間は元々ストリームの圧縮および圧縮解除のためにあった、System.IO.Compression です。そのままですね。

ちなみに、以下に技術資料もさりげなく公開されておりますので、ご紹介させていただきます。

 

System.IO.Compression 名前空間

http://msdn.microsoft.com/ja-jp/library/3z72378a(v=vs.110).aspx

 

今回は、その中から ZipFile クラスを選んで実際に使ってみましょう。

 

やってみよう

まずは準備として、 .NET Framework 4.5 を内包した Visual Studio 11 beta をインストールしましょう。こちらからダウンロード可能です。

 

Visual Studio 11 Beta

http://www.microsoft.com/visualstudio/11/ja-jp/downloads

 

はやく使いたいよ~、と思いつつ、がまんがまん。インストール中の画面はなんだかおしゃれな感じです。

インストール画面

インストールが終了したらプロジェクトを作成します。準備ができたところで、いよいよ使用してみましょう!

注意!

ここで 1 つ注意点があります。

ソリューション エクスプローラー内、[参照設定] から ZipFile クラスを含む DLL(System.IO.Compression.FileSystem.dll) を

明示的に追加してあげてください。私の環境ではこれをやらないと .NET Framework 4.0 のクラスしか使えず、ZipFile クラスを

使えませんでした。たまにこういうことあるのですよね。やれやれだぜ。

圧縮

気を取り直して、適当なフォルダを作成し中に適当なファイルを放り込みます。手順としては、

  1. ZipFile.CreateFromDirectory メソッドを呼ぶ。

そうこれだけ!第一引数に圧縮したいフォルダ、第二引数に圧縮後のフォルダ名を指定すると、思ったより素早く圧縮して

くれました。

System.IO.Compression.CompressionLevel で、圧縮処理のスピードも変更できるようなのでお試しあれ。

解凍

そして、解凍するときは

  1. ZipFile.ExtractToDirectory メソッドを呼ぶ。

これだけです。第一引数に解凍したい ZIP ファイル、第二引数に解凍後のフォルダ名を入れるだけ。なんて 3 分間クッキング!

実際にこんな感じで実装してみました。

            using System.IO.Compression; // お忘れなく
public MainWindow()
{
string StartPath = @”c:\example\start”;
string ZipPath = @”c:\example\result.zip”;
string ExtractPath = @”c:\example\extract”;

// 圧縮
ZipFile.CreateFromDirectory(StartPath, ZipPath);

// 解凍
ZipFile.ExtractToDirectory(ZipPath, ExtractPath);
}

Visual Studio の画面はこちらです。 右側のピンクの丸チェックは、上記注意!にて追加した部分です。

実装画面

 

以上、.NET で ZIP が扱えるようになったといううれしい報告でした。これで、お花見写真もステキに圧縮できますね。

ほかにも新機能満載の .Net Framework 4.5 をご紹介できればと思っています。みなさまもぜひぜひ利用してみてください。

ではまた。

 

※ この内容は 2012 年 3 月 27 日現在の情報です。Beta版の情報なので将来変更される可能性もあります。