2012-03-24 2 views
3

.zip의 디렉토리와 그 안에있는 모든 파일을 삭제하는 방법 (DotNetZip을 사용하는 것이 좋습니다)?.NET을 사용하여 Zip 파일의 디렉토리를 삭제하려면 어떻게해야합니까?

는 지금은 우편에있는 모든 파일을 통해 실행 해요,하지만 작동하지 않습니다

foreach (ZipEntry e in zip) 
{ 
    //If the file is in the directory I want to delete 
    if(e.FileName.Substring(0, 9) == "FolderName/") 
    { 
     zip.RemoveEntry(e.FileName);       
    } 
} 

이되지 않을 경우 더 나은 방법, 어떻게이 일을 만들 것 있습니까?

+0

-1 정말 같은 경로가 슬래시로 끝나야

var sel = (from x in zip.Entries where x.FileName.StartsWith(path, StringComparison.OrdinalIgnoreCase) select x.FileName).ToList(); foreach (var fn in sel) { zip.RemoveEntry(fn); } 

주 사용? 나는 몇 시간 동안 조사했다. 난 그냥 붙어있어 알아낼 수 없었어. – Chris

+1

길이가 9 자의 부분 문자열을 검색하고 11 개의 문자 중 하나와 비교하기 만하면되므로 * 항상 * false를 반환합니다. (아니면 그냥 예제 문자열입니까?) – VisualMelon

답변

7

먼저 문질러서. 컬렉션에서 요소를 제거하는 동안 foreach로 반복하지 마십시오.
나는

for(int x = zip.Count -1; x >= 0; x--) 
{ 
    ZipEntry e = zip[x]; 
    if(e.FileName.Substring(0, 9) == "FolderName/") 
     zip.RemoveEntry(e.FileName);       
} 

는 그러나, ZipFile를 클래스의 방법을보고, 내가 방법을 발견 이러한 방법으로 시도 할 것이다하십시오 ICollection에를 반환 SelectEntries합니다.
편집 : 그래서 나는 그것을 할 수 있다고 생각 사용이 ZipFile에있는 모든 항목에 대한 루프를 제거 버전 SelectEntries (문자열, 문자열)

var selection = zip1.SelectEntries("*.*", "FolderName"); 
for(x = selection.Count - 1; x >= 0; x--) 
{ 
    ZipEntry e = selection[x]; 
    zip.RemoveEntry(e.FileName);       
} 

오버로드

+0

잘 작동했습니다. 왜 내가 실패했다고 생각하니? (가능하면 지금 폴더를 삭제할 수있는 방법이 있습니까?) – Chris

+3

컬렉션에서 항목을 열거하면서 항목을 제거하면 문제를 보았을 때 놀라지 않을 수 있습니다. 이 다소 깔끔한 접근법은 색인을 통한 컬렉션을 역순으로 반복하므로 문제를 피할 수 있습니다. – tomfanning

+0

@Chris 파일을 제거하려고 할 때 어떤 오류가 발생 했습니까? –

5

다음은이 작업을 수행 할 수있는 간단한 방법이있다 :

using (ZipFile zip = ZipFile.Read(@"C:\path\to\MyZipFile.zip")) 
{ 
    zip.RemoveSelectedEntries("foldername/*"); // Delete folder and its contents 
    zip.Save(); 
} 

디렉토리와 모든 중첩 된 자식 ENTR를 삭제하기 위해 여기 http://dotnetzip.herobo.com/DNZHelp/Index.html

0

문서 이거 야, 내가 dir/subdir/

관련 문제