2017-01-31 2 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(); 

     } 
    } 

Есть ли способ для этого, или я должен, например, вручную открыть почтовый индекс, получить все записи и проверить один за другим, если имя файла, я добавляю уже существует в архиве?

+0

Учитывая характер файлов Zip, я ожидал бы удалить старую запись и добавить новую. Заменить будет только помощником для выполнения двух операций. – Richard

ответ

2

CreateEntryFromFile будет добавить еще один, если есть уже запись с таким именем:

запись с указанным именем (entryName) уже существует в архиве, вторая запись создается с одинаковым именем

Итак, вы должны указать 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

Смежные вопросы