プログラミングとかブログ

Unity/C#/SRPGStudio/RPGツクールMVの情報とかその他気になったことを調べて書きます。

【C#】DotNetZipでZip解凍時の上書き例外への対処方法

DotNetZipライブラリのExtractメソッドは、解凍ファイルが解凍先に既に存在しているとデフォルトで以下のような例外を投げます。

型 'Ionic.Zip.ZipException' のハンドルされていない例外が Ionic.Zip.dll で発生しました
追加情報:The file C:\Users\sauto\Desktop\smp1\candidate.c already exists.

これはZipEntry(解凍対象)のExtarctExisitingFileの値がThrowになっているためです。
例外を投げないようにするためには、Extractメソッドの引数に
ExtractExistingFileAction.DoNotOverwrite(常に上書き禁止)か
ExtractExistingFileAction.OverwriteSilently(常に上書きする)のどちらかを指定します。

using (ZipFile zip = ZipFile.Read(zipPath, enc))
{
 for (int n = 0; n < zip.Count; n++)
  {
   //常時上書きする
   zip[n].Extract(ExtractExistingFileAction.OverwriteSilently);
  }
}

上書き可否選択のやり方はこちらで。