C# ZipFile对象上的Dup密钥添加错误

C# ZipFile对象上的Dup密钥添加错误,c#,dotnetzip,C#,Dotnetzip,我正在想办法先检查一下 在我遍历集合中的每个文件并尝试将其添加到ZipFile集合的循环中,我得到: using (var zip = new ZipFile()) { foreach(...) { var tryFile = Directory. GetFiles(fileLocalization, fileName, SearchOp

我正在想办法先检查一下

在我遍历集合中的每个文件并尝试将其添加到ZipFile集合的循环中,我得到:

using (var zip = new ZipFile())
{
    foreach(...)
    {
         var tryFile = Directory.
                 GetFiles(fileLocalization, fileName, 
                                             SearchOption.TopDirectoryOnly);

         if (!string.IsNullOrEmpty(file[0]))
              zip.AddItem(file[0], GetPathStructure(file.NameInContainer));
    }
}
ZipFile类型来自
Ionic.Zip.dll

问题是
AddItem
出错,并且我得到一个已经添加了相同密钥的项。因此,例如,最后它尝试添加此密钥,该密钥已在本zip字典的前面添加:

“C:\www\files\233272\Exercise files\SampleCode\Original\MyTest.cs”

我无法检查dup是否正常工作…它仍然尝试在循环中添加两次

在尝试添加之前,如何检查任何文件[0]?我尝试了
LINQ.Any()
,但如果我可以使用LINQ来实现这一点,就无法获得正确的语法

我试过了,但在语法上我做得不对:

if (!string.IsNullOrEmpty(tryFile[0]) && !zip.Contains(tryFile[0])
也试过

if (!string.IsNullOrEmpty(tryFile[0]) && !zip.Any(zip[tryFile[0]])
if (!string.IsNullOrEmpty(tryFile[0]) && !zip.ContainsEntry(tryFile[0]))
也试过

if (!string.IsNullOrEmpty(tryFile[0]) && !zip.Any(zip[tryFile[0]])
if (!string.IsNullOrEmpty(tryFile[0]) && !zip.ContainsEntry(tryFile[0]))

Qu有点老了,但是既然您正在创建并填充空zip,为什么不自己跟踪文件名呢? 创建一个
列表
,将每个文件名添加到其中,然后使用.contains查看要添加的文件是否已经在其中。 您的列表应该是ZIP文件内容的精确镜像

快速签入我的项目后:

  zip.ContainsEntry("filename.ext")
我应该做这项工作。此外,IONIC ZIP保留的
列表似乎是

  zip.EntryFileNames

这篇文章已经发布很久了,但我也遇到了同样的问题,我所做的是确保在创建新的Zip文件之前删除该Zip文件。我认为当你创建一个新的zip并且它已经存在时,它只是附加到它上面

            if (File.Exists(file_name))
            {
                File.Delete(file_name);
            }

这个问题很老,但我需要澄清一下。本·麦金太尔说得对。我遇到的问题是,我正在添加来自不同目录的同名文件,因此使用文件[0]检查它是否包含条目将无法工作。您必须获取文件名。我建议使用Path.GetFileName(fullPath)