.NET で ZIPを扱う方法
.NET Framework 4.5以降だと標準ライブラリの ZipFileクラス を利用することで、Zipファイルを簡単に取り扱えます。
別の手段として、オープンソースのライブラリを利用する方法もあります。今回は DotNetZip というライブラリを使ってZIPの圧縮・解凍を行ってみます。
コンソールアプリやデスクトップアプリはもちろん、ASP.NETアプリ(Web)でも同じように扱えます。
ZIP圧縮を行う方法
まずはNuGetからライブラリをインストールします。上記URLから直接DLLをダウンロードして参照に追加してもよいです。
Install-Package DotNetZip
ではまずZIP化してみます。指定したパスのファイルを生成したZIPアーカイブに追加していきます。ファイルだけでなく、TextWriter(メモリ上のデータ) も追加できます。
C#
// using Ionic.Zip;
// using Ionic.Zlib;
// ZIPファイルの生成
using (var zip = new ZipFile(Encoding.GetEncoding("shift_jis")))
{
// 圧縮レベル
zip.CompressionLevel = CompressionLevel.BestCompression;
// ファイルやディレクトリをZIPアーカイブに追加
// 以下のような構成のZIPアーカイブとなる
// hogefoo.zip
// --hoge.txt
// -- foo
zip.AddFile(@"C:\work\hoge.txt", "");
zip.AddDirectory(@"C:\work\foo", "foo");
// 保存
zip.Save(@"C:\work\hogefoo.zip");
}
VB.NET
' Imports Ionic.Zip
' Imports Ionic.Zlib
' ZIPファイルの生成
Using zip = New ZipFile(Encoding.GetEncoding("shift_jis"))
' 圧縮レベル
zip.CompressionLevel = CompressionLevel.BestCompression
' ファイルやディレクトリをZIPアーカイブに追加
' 以下のような構成のZIPアーカイブとなる
' hogefoo.zip
' --hoge.txt
' -- foo
zip.AddFile("C:\work\hoge.txt", "")
zip.AddDirectory("C:\work\foo", "foo")
' 保存
zip.Save("C:\work\hogefoo.zip")
End Using
日本語を使う場合には “shift_jis” にしないと文字化けするようです。
ZIP解凍を行う方法
次は解凍です。ZipFileクラスのコンストラクタに解凍する .zipファイルを指定し、”ExtraAll” メソッドを利用します。基本的には一括でのZIP解凍を行うことが多いと思いますが、個別に解凍することもできるようです。
C#
// ZIPファイルを指定
string input = @"C:\work\hogefoo.zip";
string output = @"C:\work\hogefoo";
using (var zip = new ZipFile(input, Encoding.GetEncoding("shift_jis")))
{
// 一括で指定パスに解凍
zip.ExtractAll(output);
//// 全エントリーを走査して個別解凍
//foreach (var entry in zip.Entries)
//{
// entry.Extract();
//}
// 特定のファイルのみ解凍
//zip["hoge.txt"].Extract("extra");
}
VB.NET
' ZIPファイルを指定
Dim input As String = "C:\work\zip\hogefoo.zip"
Dim output As String = "C:\work\zip\hogefoo"
Using zip = New ZipFile(input, Encoding.GetEncoding("shift_jis"))
' 一括で指定パスに解凍
zip.ExtractAll(output)
'' 全エントリーを走査して個別解凍
'For Each entry As ZipEntry In zip.Entries
' entry.Extract()
'Next
'' 特定のファイルのみ解凍
'zip("hoge.txt").Extract("extra")
End Using
まとめ
簡単に使えて便利なZIPライブラリでした。
コメントを書く