Ionic.Zip ArgumentException (элемент с тем же ключом уже был добавлен)

Я использую 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));

но после добавления некоторых каталогов я получаю следующую ошибку:

Элемент с таким же ключом уже был добавлен.

Как это возможно? Как могут быть повторяющиеся имена в списке папок в той же родительской папке?

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)));
Другие вопросы по тегам