2017-01-31 39 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中存在?

+0

鑑於Zip文件的性質,我希望刪除舊條目並添加一個新條目。替換隻是幫助執行這兩個操作。 – Richard

回答

2

CreateEntryFromFile將再增加一個,如果已經有具有該名稱的條目:

具有指定名稱(entryName)已經存在於 存檔,第二項具有相同名稱創建一個條目

所以你必須Delete它從archieve添加它之前。

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