【ハウツー】
サイズが大きいファイルを扱うアプリケーションでは、ZIP形式にてファイルを圧縮できると便利です。そこで本稿ではDotNetZipというライブラリを紹介します。
DotNetZipを利用すると、.NET環境でZIPファイルを容易に作成し、解凍できるようになります。DotNetZipには高度な機能(パスワード設定、自己解凍書庫、圧縮レベル設定、ZIP64、AES-256bit暗号化等)が備わっているため、ZIPファイルに対する様々な操作を行えるようになります。
DotNetZipはCodePlexにて、オープンソース(Ms-PLライセンス)として開発されています。.NET (Compact) Framework2.0以上の環境で動作するため、ASP.NET、Windowsフォーム、スマートデバイス等の開発で使用できます。
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の実装サンプルとして参考になるでしょう。
それでは、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ファイルが出力されます。
| 理研、脳・脊髄形成に必要な神経板湾曲の仕組みを解明 [20:16 5/25] |
| 京大、「慢性閉塞性肺疾患」患者の労作時呼吸困難は鍼治療が有効と実証 [20:08 5/25] |
| 120Hz SHVカメラ用イメージセンサーを使った撮像装置 - SHVフルスペック化へ [18:10 5/25] |
| 京大、視覚による物体認知は前頭前野からのトップダウン信号が重要と確認 [17:45 5/25] |
| 製品数の拡大だけでなくBCPの展開なども含めた総合力で事業の強化を図るTI [17:25 5/25] |
|
【連載】読む鉄道、観る鉄道 第9回 『サブウェイ・パニック』 - 1970年代のニューヨークと地下鉄の情景を描く [08:00 5/27] ライフ |
|
【連載】発音も聞けちゃう、知って得するidiom情報 第14回 call it a day [08:00 5/27] ライフ |
|
MINI、ロールスロイスにインスパイアされた最高級品質の特別仕様車を発売 [07:30 5/27] ライフ |
|
【連載】Japanglish、正しく言うならこうでしょう 第57回 gasoline stand(ガソリンスタンド) [07:00 5/27] キャリア |
|
【連載】これだけは要チェック! TOEIC(R)単語帳 第105回 今回のお題は…「regard A as B」 [07:00 5/27] キャリア |
4つの診断で、自分の適性を見つめなおそう!
働くこと・挑戦し続けることへの思いを綴ったインタビュー
あなたにピッタリのアドバイスを読むことができます。
転職に必要な情報が収集できます
企業からアプローチのメッセージが届きます。