2013-07-10 38 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

相關問題