(.Net)MemoryStreamのデータをGZipStreamで圧縮するときの注意点..で、.Netは標準のクラスで、GZIP(.gz)が作れることを書きましたが、Windowsではあまり使われていない形式なのでちょっと不便です。
ところが、DotNetZipというライブラリを使えば非常に簡単にZIPファイルを作ることができます。
詳しい使い方はマイコミジャーナル:【ハウツー】C#でZIPファイルを扱えるDotNetZip (1) .NETで書庫を作成、圧縮を見てもらえばいいんですが、ちょっと圧縮でハマったことがあったのでメモ。
とりあえずファイル一つ圧縮できればいいので下記のようなコードを書きました。
using (ZipFile zip = new ZipFile(Encoding.GetEncoding("shift_jis")))
{
zip.CompressionLevel = CompressionLevel.BestCompression;
//ファイルを追加
zip.AddFile("databse.mdb");
zip.Save("test.zip");
}
これでできたZIPを確認すると、フォルダ構成が基の圧縮元があったファイルのパスになっているのです。
つまり、こんな感じ。
mydocuments/Visual Studio 2008/Projects/ZIPTest/ZIPTest/bin/x86/Debug
まぁ、上記マイコミジャーナルの記事にも書いてあることなんですが、AddFile メソッドの第二引数でパスを明示的にしてしないとこうなるようです。
ということで、ZIPのルートに圧縮元ファイル置きたかったので、こうしました。
zip.AddFile("databse.mdb","");
しかし、このライブラリはホント手軽に使えるので便利ですね。