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