【问题标题】:Overwrite entry in zip file覆盖 zip 文件中的条目
【发布时间】:2013-01-27 22:04:45
【问题描述】:

我遇到了麻烦,我得到了这个代码:

DirectoryInfo di = new DirectoryInfo(dir);
FileInfo[] rgFiles = di.GetFiles();
DirectoryInfo[] d = di.GetDirectories();
if(rgFiles != null && d != null) {
foreach (FileInfo fi in rgFiles)
{
    foreach (DirectoryInfo dii in d)
    {
        using (ZipFile zip = ZipFile.Read(locateZipFile()))
        {

            zip.AddFile(fi.FullName, "");

            zip.AddDirectory(dii.FullName,dii.Name);
            toolStripStatusLabel1.Text = "Inserting " + fi.Name;
            toolStripStatusLabel1.Text = "Inserting " + dii.Name + " and all of it's contents";

            MessageBox.Show("Inserted the file " + fi.Name);
            MessageBox.Show("Inserted the folder " + dii.Name + " and all contents in it.");
            zip.Save();

        }
    }
}

一切都很好,但是当我尝试在 zip 中添加一个名称相同的文件时,它不会覆盖它,我想要它。关于我如何做到这一点的任何想法?谢谢。

【问题讨论】:

    标签: c# overwrite dotnetzip


    【解决方案1】:

    您可以使用UpdateFile 方法。

    zip.UpdateFile(fi.FullName, "");
    

    此方法将文件添加到 zip 存档中,或者,如果该文件已存在于 zip 存档中,则此方法更新 zip 存档中给定文件名的内容。 UpdateFile 方法可能更准确地称为“AddOrUpdateFile”。

    成功后,应用程序无法获知文件是添加还是更新。

    【讨论】:

      【解决方案2】:

      行前

      zip.AddFile(fi.FullName, "");
      

      您必须测试该名称是否已存在于条目中。如果是,请将其移除,然后重新插入。

      【讨论】:

      • 感谢它的工作!但这不适用于目录?如果是目录我该怎么办?
      • 可以使用GetDirectoryName方法:Path.GetDirectoryName(fi.FullName); (不要忘记将此标记为响应!;))
      猜你喜欢
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 2010-10-15
      相关资源
      最近更新 更多