2013-07-10 2 views
4

10 개의 텍스트 파일을 포함하는 zip 파일이 있다고 가정합니다.ZIP 압축 파일의 하위 디렉토리에있는 파일을 반복합니다.

using (ZipArchive archive = ZipFile.OpenRead(zipIn)) 
{ 
    foreach (ZipArchiveEntry entry in archive.Entries) 
    { 
     Console.writeLine(entry) 
    } 
} 

을하지만, 텍스트 파일을 하위 디렉토리 내에있는 가정 : 위의 코드 만 하위 폴더를 ('하위'을 출력

zip/subdirectory/file1.txt 

이 경우는 사용이 텍스트 파일을 반복하는 것은 쉽다), 해당 폴더 내의 모든 텍스트 파일과 대조됩니다.

하위 디렉토리의 파일을 루핑하는 간단한 방법이 있습니까?

+1

재귀와보십시오. –

답변

7

나는 당신의 프로그램을 재현했다. zip 아카이브를 반복 할 때 아카이브 내의 전체 디렉토리 구조에있는 모든 파일의 목록을 얻습니다. 따라서 재귀가 필요하지 않으며 지금하고있는 것처럼 반복됩니다.

API가 파일과 폴더를 구분하지 않기 때문에 혼란 스럽습니다. 여기서 확장 방법이 도움이됩니다 :

static class ZipArchiveEntryExtensions 
{ 
    public static bool IsFolder(this ZipArchiveEntry entry) 
    { 
     return entry.FullName.EndsWith("/"); 
    } 
} 

그런 다음 당신이 할 수 있습니다

using (var archive = ZipFile.OpenRead("bla.zip")) 
{ 
    foreach (var s in archive.Entries) 
    { 
     if (s.IsFolder()) 
     { 
      // do something special 
     } 

    } 
} 
2

문제점을 재현 할 수 없습니다. 그것은 내 테스트 케이스에서 잘 작동합니다

using (var archive = ZipFile.OpenRead(zipIn)) 
{ 
    foreach (var zipArchiveEntry in archive.Entries) 
    { 
     Console.WriteLine(zipArchiveEntry); 
    } 
} 
Console.ReadLine(); 

결과 :

enter image description here

관련 문제