3

我正在使用 Ionic Zip 压缩特定文件夹中的所有文件夹,不包括备份文件夹(创建备份的文件夹)。

这是我的代码:

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));

但添加一些目录后,我收到以下错误:

已添加具有相同密钥的项目。

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

4

1 回答 1

2

当我检查异常时,它似乎添加了要在字典中存档的所有文件的列表。

我不知道它用作可能导致此错误的键(可能使用文件名作为键并且在两个不同的文件夹中具有相同的名称可能会导致它)。

解决方案:但是我发现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)));
于 2016-12-29T23:56:26.393 回答