我使用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));
但在添加一些目录后,我收到以下错误:
已添加具有相同键的项目。
怎么可能?如何在同一父文件夹的文件夹列表中重复名称?
答案 0 :(得分:2)
当我检查异常时,似乎它添加了要在字典中存档的所有文件的列表。
我不知道它作为可能导致此错误的密钥的用途(可能使用文件名作为密钥并且在两个不同的文件夹中具有相同的名称可能导致它)。
<强>解决方案强>:
但是我发现AddDirectory
和AddFiles
有另一个重载,它接受归档中的目录路径。为每个目录提供存档中的唯一路径解决了问题。就我而言,我用过:
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)));