2017-01-31 21 views
2

指定したzipアーカイブにファイルを作成または追加するコードがあります。私が見つけることができないのは、同じ名前の別のファイルを追加しようとしている場合に、zipファイルを置き換えるオプションです。zipの同じ名前のファイルを置き換えます。

private void button1_Click(object sender, EventArgs e) 
    { 
     if (oflFilesToZip.ShowDialog() == DialogResult.OK) 
     { 
      string[] files = oflFilesToZip.FileNames; 
      bool zipExists = File.Exists(zipPath); 

      ZipArchive zip; 
      if (zipExists) 
      { 
       zip = ZipFile.Open(zipPath, ZipArchiveMode.Update); 
      } 
      else zip = ZipFile.Open(zipPath, ZipArchiveMode.Create); 

      foreach (string file in files) 
      { 
       zip.CreateEntryFromFile(file, Path.GetFileName(file), CompressionLevel.Optimal);     
      } 
      zip.Dispose(); 

     } 
    } 

そのための方法はありますか、私には、例えば、手動で、zipファイルを開き、すべてのエントリを取得し、私はすでに追加しているファイル名は、ジップ内に存在する場合は、1つずつチェックしなければならないのですか?すでにその名前のエントリがあった場合

+0

Zipファイルの性質を考えれば、古いエントリを削除して新しいエントリを追加することになります。 Replaceは、2つの操作を実行するヘルパーにすぎません。 – Richard

答えて

2

CreateEntryFromFileは別のものを追加します。

指定された名前(ENTRYNAME)すでに2番目のエントリは、同じ名前で作成され、 アーカイブに存在しているのエントリ

したがって、あなたが追加する前に、アーチーフからDeleteにする必要があります。

foreach (string file in files) 
{ 
    ZipArchiveEntry oldEntry = zip.GetEntry(file); 
    if(oldEntry != null) oldEntry.Delete(); 
    zip.CreateEntryFromFile(file, Path.GetFileName(file), CompressionLevel.Optimal);   
} 
+0

完璧な、ありがとう:) – Janushoff

関連する問題