用zip替换同名文件

时间:2017-01-31 12:50:33

标签: c# 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,获取所有条目并逐一检查我添加的文件名是否已存在于zip中?

1 个答案:

答案 0 :(得分:5)

如果已经有一个具有该名称的条目,

CreateEntryFromFile将添加另一个:

  

具有指定名称(entryName)的条目已存在于   存档,使用相同的名称创建第二个条目

所以在添加之前你必须从archieve Delete

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