Ionic.Zip ArgumentException(已添加具有相同键的项目)
Ionic.Zip ArgumentException (An item with the same key has already been added)
我正在使用 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));
但是在添加了一些目录之后,出现了以下错误:
An item with the same key has already been added.
怎么可能?同一个父文件夹的文件夹列表怎么可能重名?
当我检查异常时,它似乎在字典中添加了所有要归档的文件的列表。
我不知道它使用什么作为可能导致此错误的密钥(可能使用文件名作为密钥并且在两个不同的文件夹中具有相同的名称可能会导致它)。
解决方法:
但是我发现 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)));
我正在使用 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));
但是在添加了一些目录之后,出现了以下错误:
An item with the same key has already been added.
怎么可能?同一个父文件夹的文件夹列表怎么可能重名?
当我检查异常时,它似乎在字典中添加了所有要归档的文件的列表。
我不知道它使用什么作为可能导致此错误的密钥(可能使用文件名作为密钥并且在两个不同的文件夹中具有相同的名称可能会导致它)。
解决方法:
但是我发现 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)));