ZIPファイルを解凍する

続けて、ZIPファイルを解凍するコードを見ていきましょう。

ZIPファイルを解凍するコード

//(1)ZIPファイルを読み込み
using (ZipFile zip = ZipFile.Read(@"C:\ZipSample\サンプル.zip", 
                     Encoding.GetEncoding("shift_jis")))
{
  //(2)解凍時に既にファイルがあったら上書きする設定
  zip.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently;
  //(3)全て解凍する
  zip.ExtractAll(@"C:\Work");

  //(4)ZIP内のファイルを順に取り出す場合
  //foreach (ZipEntry entry in zip)
  //{
  //  //ファイル名を出力
  //  Console.WriteLine(entry.FileName);
  //  //個々に解凍
  //  entry.Extract(@"C:\Work");
  //}
}

解凍する手順は次の通りです。

(1)まずReadメソッドを利用してZIPファイルを読み込みます。引数にはZIPファイルのパスとエンコーディングを指定します。
(2)ExtractExistingFileプロパティには、解凍時に同名ファイルがある場合の設定を行います。初期設定では例外がスローされますが、ここではそのまま上書きするように変更しています。
(3)最後にExtractAllメソッドで解凍します。引数に指定したパスに書庫内の全ファイルが解凍されます。
(4)もし、書庫の中に含まれるファイルに個別にアクセスしたい場合は、ZipEntryクラスを使用できます。ZipEntryクラスは書庫内のファイルを表すクラスです。

書庫内のファイルを操作する

続けて、書庫中のファイルをリネームして削除するコードを見てみましょう。

ZIPファイルを変更するコード


using (ZipFile zip = ZipFile.Read(@"C:\ZipSample\サンプル.zip",
           Encoding.GetEncoding("shift_jis")))
{
  //(1)リネーム:「ファイル2.bmp」の名前を「イラスト.bmp」に変更
  ZipEntry entry = zip[@"画像\ファイル2.bmp"];
  entry.ProvisionalAlternateEncoding = Encoding.GetEncoding("shift_jis");
  entry.FileName = @"画像\イラスト.bmp";

  //(2)削除:「ファイル1.txt」を取り除く
  zip[@"ZipSample\ファイル1.txt"] = null;

  //(3)ZIPファイルを上書保存
  zip.Save();
}

書庫を更新する手順は次の通りです。

(1)ファイル名を変更するには、対象ファイルを指定して、一旦ZipEntryクラスに代入します。続けてProvisionalAlternateEncodingプロパティにエンコーディングを設定した後、FileNameプロパティに新しいファイル名を指定します。
(2)ファイルを削除する場合は、ZipFileクラスでファイル名を指定してnullを代入します。
(3)最後にSaveメソッドを呼び出してZIPファイルを更新します。