2016-12-29 47 views
1

我使用离子拉链拉上特定文件夹排除在备份文件夹(创建备份云)的所有文件夹。Ionic.Zip的ArgumentException(具有相同键的项已被添加)

这是我的代码:

ZipFile zip = new ZipFile(); 
string mainpath = HttpContext.Current.Server.MapPath("~/"); 
Directory.GetDirectories(mainpath).Where(d=> !d.ToLower().EndsWith("backup")).ToList() 
.ForEach(d=> zip.AddDirectory(d)); 

,但增加了一些目录后,我发现了以下错误:

An item with the same key has already been added.

这怎么可能?如何可能在同一父文件夹中的文件夹列表中重复名称?

回答

1

当我检查了例外,它似乎将所有的文件列表中的字典进行归档。

我不知道是什么,它使用作为可能导致此错误的关键(可能会使用文件名作为重点,并在两个不同的文件夹具有相同的名称可能会导致它)。

解决方案: 但是我发现AddDirectoryAddFiles有接受存档目录路径中的另一个超载。为每个目录提供一个独特的档案路径解决了这个问题。在我来说,我使用:

string mainpath = HttpContext.Current.Server.MapPath("~/"); 
    Directory.GetDirectories(mainpath).Where(d=> !d.ToLower().EndsWith("backup")).ToList() 
.ForEach(d=> zip.AddDirectory(d, d.Substring(mainpath.Length))); 
相关问题