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ファイルを更新します。