2014-11-05 98 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