2016-12-29 3 views
1

Ionic Zip을 사용하여 백업 폴더를 제외하고 특정 폴더의 모든 폴더를 압축합니다 (백업 생성).Ionic.Zip ArgumentException (동일한 키가있는 항목이 이미 추가되었습니다.)

이 내 코드입니다 :

An item with the same key has already been added.

어떻게 가능 :

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

예외를 검사하면서 사전에 보관할 모든 파일의 목록을 추가하는 것으로 보입니다.

이 오류의 원인이 될 수있는 키 (파일 이름을 키로 사용하고 두 개의 다른 폴더에서 같은 이름을 사용하면이 오류가 발생할 수 있음)로 사용하는 것이 무엇인지 알 수 없습니다.

솔루션는 : 그러나 나는 AddDirectoryAddFiles이 아카이브에 디렉토리 경로를 받아 다른 과부하를 가지고 있다는 것을 발견했다. 각 디렉토리에 아카이브의 고유 한 경로를 제공하여 문제를 해결했습니다. 제 경우에는 다음을 사용했습니다 :

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