2014-11-05 100 views
0

有誰知道如何解壓縮已壓縮的文件夾,以便只返回文件夾內的文件而不是文件夾本身。解壓縮壓縮文件夾,ASP.NET MVC 5

目前我使用此:

ZipFile.ExtractToDirectory(<Zipped File Source>, <Unzipped File Destination>) 

也能正常工作對於已經進行了壓縮成一個壓縮文件的文件,但對於已經進行了壓縮文件夾中的文件,我只是想要的文件。

回答

1

感謝Stewart_R,爲了指引我在這個正確的方向。

只是爲了重申,下面的「第一種方法」可行,但不是我需要的方式。

第一種方法(VB):

ZipFile.ExtractToDirectory(<Zipped File Source>, <Unzipped File Destination>) 

正如我在我的問題前面提到的,使用上面的代碼解壓縮已壓縮在同文件或包含文件的文件夾,但這樣做後期會導致內部文件的文件夾名稱。爲了得到公正的文件試試這個第二種方法(VB):

Using archive As ZipArchive = ZipFile.OpenRead(<zip_file_path>) // "<zip_file_path>" is the location of your zip file 
    For Each entry As ZipArchiveEntry In archive.Entries 
     If entry.Name.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then // ".txt" is the extention that you're looking for 
      entry.ExtractToFile(Path.Combine(<unzip_to_path>, entry.Name))    // "<unzip_to_path>" is the destination folder 
     End If 
    Next 
End Using 

注:

「entry.Name」將返回及其延伸即實際文件名;

"somefile.txt" 

這很重要,因爲使用「第一種方法」進行解壓縮返回;

"folder_name/somefile.txt" 

如果您替換,則此行爲可以使用「第二種方法」進行復制;

"entry.Name" 

with;

"entry.FullName" 

最後請注意:

如果你有一個以上的擴展,你要匹配你可以加一個「或」(VB),或|| (C#)條件內:

VB: 
    entry.Name.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) or 
    entry.Name.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) Then 

C#: 
    entry.Name.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) || 
    entry.Name.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) Then 
1

相同的代碼解壓縮所有文件。

從這裏:

http://msdn.microsoft.com/en-us/library/hh485723%28v=vs.110%29.aspx

我們:

提取所有在指定zip文件存檔到上 文件系統的目錄。

+0

是的我意識到這一點,但這不是我所問的。 – plasmasnakeneo 2014-11-05 22:19:01

+0

?那恐怕我不明白這個問題。這確實會給你一個壓縮文件夾中的所有文件 – 2014-11-05 22:23:39

+1

我想解壓文件夾並將所有文件保存在我指定的任何目錄中。現在它解壓縮該文件夾並將該文件夾中的所有文件保存在該文件夾中。還有另一個應用程序需要查看該目錄,並期望看到不是另一個目錄的文件。爲了進一步闡述,可能有時候有人將一組文件壓縮在一起並上傳該壓縮文件,而其他時間他們可以壓縮包含該文件的文件夾並上傳。這會中斷其他應用程序正在訪問的目錄位置。 – plasmasnakeneo 2014-11-05 22:30:04