2016-12-29 4 views
1

Я использую Ionic Zip для zip всех папок в определенной папке, за исключением папки резервного копирования (которая создавала резервные копии).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

Поскольку я проверял исключение, кажется, что он добавляет список всех файлов, которые будут архивироваться в словаре.

Я не знаю, что он использует в качестве ключа, который может вызвать эту ошибку (возможно, использование имени файла в качестве ключа и с тем же именем в двух разных папках может вызвать его).

Решение: Однако я узнал, что 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))); 
Смежные вопросы