【C#】C#でZIPに圧縮・解凍を扱うには ~ 入門編 ~

■ はじめに

 * 結論から言えば、案3がいいと思う


■ 案2:GZipStream クラスを使用して行う

http://msdn.microsoft.com/ja-jp/library/system.io.compression.gzipstream.aspx

欠点

 * 一番いいと思ったのだが、gzip データ形式しかないっぽい。
 * 複数ファイルを直接扱うことはできず、圧縮率もそれほど高くないらしい
http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/cafe4772-7bcb-4d29-87dd-25f600064d20/

サンプル

 * .NET Framework 2.0 から追加された
   System.IO.Compression.GZipStream、System.IO.Compression.DeflateStream クラスを利用し
   ストリームでの圧縮・展開を行う
http://code.msdn.microsoft.com/windowsdesktop/C-a8033833

■ 案3:DotNetZipを使用して行う

http://social.msdn.microsoft.com/Forums/ja-JP/vsgeneralja/thread/cafe4772-7bcb-4d29-87dd-25f600064d20/
でよく使用されていると言ってる。

ライセンスについて

 * ゆるいらしい。
http://astel-labs.net/blog/diary/2010/06/100630-1.html

構文

Zip解凍
using (ZipFile zip = ZipFile.Read(
      filePath1 // filePath1:保存元のパス
    , Encoding.GetEncoding("Shift_JIS") // 日本語を使用している場合、Shift-JISを指定する
    ))
{
    // 解凍処理(全て解凍する場合)
    zip.ExtractAll(filePath2); // filePath2:保存先のパス
    
    // 解凍処理(ZIP内のファイルを順に取り出す場合)
    //foreach (ZipEntry entry in zip)
    //{
    //  //個々に解凍
    //  entry.Extract(filePath2);
    //}
}
Zip圧縮
using (ZipFile zip = new ZipFile(Encoding.GetEncoding("Shift_JIS")))
{
    // 圧縮レベルを設定
    zip.CompressionLevel = CompressionLevel.BestCompression;

    // ファイルを追加
    zip.AddDirectory(filePath1); // filePath1:保存元のパス

    // ZIPファイルを保存
    zip.Save(filePath2); // filePath2:保存先のパス
}

サンプル

 * 以下の関連記事を参照。
https://blogs.yahoo.co.jp/dk521123/20127299.html

参考資料

http://journal.mycom.co.jp/articles/2009/08/21/DotNetZip/001.html
http://techbank.jp/Community/blogs/nora/archive/2009/08/23/12176.aspx


関連記事

Java

ZIP 処理 ~圧縮編~
https://blogs.yahoo.co.jp/dk521123/33497835.html
ZIP 処理 ~解凍編~
https://blogs.yahoo.co.jp/dk521123/33645352.html

C#

C#でZIPに圧縮・解凍を扱うには ~ サンプルコード編 ~
https://blogs.yahoo.co.jp/dk521123/20127299.html