2013-08-28 37 views
2

我有一個大的ZIP文件,其中包含許多目錄,每個文件都需要讀取數以萬計的小文件。讀取ZIP而不提取C#

使用7-Zip從ZIP中提取它們的過程需要相當長的時間。在C#中,我可以在操作之前首先在整個ZIP文件中提取整個ZIP文件,但理想情況下,我希望從ZIP中一次只讀取一個文件到內存中,而不必將其解壓縮到磁盤上的某個位置。

我已經看到了原生C#ZIP實用工具以及DotNetZip和SharpZipLib,但沒有看到任何與我之後直接相關的東西。

能做到這一點嗎&它會提供任何性能優勢,而不是簡單地提取首先?

+0

你可以使用任何這些庫打開拉鍊作爲'Stream'。 – Romoku

+2

內存比驅動器IO快得多,所以您應該看到來自流式傳輸而不是解壓縮的顯着性能優勢。 – NWard

回答

0

您可以使用DotNetZip從zip文件中提取每個文件名(及其屬性)。

using (ZipFile zipFile = ZipFile.Read(ExistingZipFile)) 
{ 
    foreach (ZipEntry zip in zipFile) 
    { 
     System.Console.WriteLine("Zipfile: {0}", zip.FileName); 
     System.Console.WriteLine("Zipfile: {0}", zip.Comment); 
    } 
} 
1
using (ZipArchive zipFile = ZipFile.OpenRead(zipPath)) 
     { 
      foreach(ZipArchiveEntry zip in zipFile.Entries) 
      { 
       System.Console.WriteLine("Zipfile: {0}", zip.FullName); 
       System.Console.WriteLine("Zipfile: {0}", zip.Length); 
      } 
     }