2014-09-11 172 views
1

我有一個案例,我需要用C#Ionic.zip庫提取Zip文件。 Zip文件包含多個文件夾,我想提取並將特定文件夾複製到特定目標。Ionic Zip只提取特定文件夾

例如命名爲abc.zip和目錄結構Zip文件就會像

父目錄 - > Sub目錄1->提交,文件B 父目錄 - > Sub目錄2->文件c,文件d

我只想複製子目錄1,我該如何完成這項任務?

回答

2
 var existingZipFile = "name of the file.zip"; 
     var targetDirectory = "name of the folder"; 

     using (ZipFile zip = ZipFile.Read(existingZipFile)) 
     { 
      foreach (ZipEntry e in zip.Where(x => x.FileName.StartsWith("Sub directory 1"))) 
      { 
       e.Extract(targetDirectory); 
      } 
     } 
+1

謝謝,它做到了! – 2014-09-12 10:04:03

+0

@DashyKhan甜。請儘快回答 – playful 2014-09-12 11:38:07

+0

儘管OP很高興:您的建議不會創建子目錄結構*父目錄 - >子目錄1->文件a *,而問題僅針對*子目錄1->文件a * ?然後我可以想象,對Extract()使用ExtractCriterion參數比創建所有條目然後對其進行過濾要快。 – 2015-01-21 11:21:27

0

這裏的另一種可能的解決方案:

using (ZipFile zip = ZipFile.Read(sourceFile)) 
{ 
    zip.ExtractSelectedEntries("name = *", "My sub directory", targetPath, ExtractExistingFileAction.OverwriteSilently); 
} 

雖然這可能會更快然後枚舉所有條目,然後過濾它們,它然而,沒有解壓空文件夾的缺點。