vb.net解压缩文件夹中的多个zip文件

时间:2015-03-06 22:31:03

标签: vb.net extract unzip

有没有人知道将文件夹中的多个zip文件解压缩到一个位置的最佳方法。例如,最好使用codeplex dll,还是尝试使用最新的.net框架?谢谢,VBvirg。

2 个答案:

答案 0 :(得分:1)

在最后一次通信之后的方式,但如果有人偶然发现这个仍然感兴趣,这里是如何做到的。

确保您使用的是.NET Framework 4.5或更高版本,并且已包含对System.IO.CompressionSystem.IO.Compression.FileSystem的引用。

Imports System.IO.Compression

' returns number of archives successfully unpacked
Function unpackAll(pat As String) As Integer
    unpackAll = 0
    If Not Directory.Exists(pat) Then Return unpackAll
    For Each zfn In Directory.GetFiles(pat, "*.zip")
        Try
            ZipFile.ExtractToDirectory(zfn, pat)
            unpackAll += 1
        Catch ex As exception
        End Try
    Next
End Function

请注意,这会将所有内容解压缩到与.zip存档存在的文件夹相同的文件夹中。这样做可能更有用:

' returns number of archives successfully unpacked
Function unpackAll(pat As String, Optional destPath As String = "") As Integer
    unpackAll = 0
    If Not Directory.Exists(pat) Then Return unpackAll
    If destPath = "" Then destPath = pat
    If Not Directory.Exists(destPath) Then
        Try
            Directory.CreateDirectory(destPath)
        Catch ex As Exception
        End Try
    End If
    If Not Directory.Exists(destPath) Then Return unpackAll
    For Each zfn In Directory.GetFiles(pat, "*.zip")
        Try
            ZipFile.ExtractToDirectory(zfn, destPath)
            unpackAll += 1
        Catch ex As Exception
        End Try
    Next
End Function

然后像这样称呼它:

unpackAll("C:\logs","C:\unpacked_logs")

如果解压缩了多少档案并不重要,那么该函数可以重写为子:

' attempts to unpack all the .zip archives in a folder
Sub unpackAll(pat As String)
    If Not Directory.Exists(pat) Then Exit Sub
    For Each zfn In Directory.GetFiles(pat, "*.zip")
        Try
            ZipFile.ExtractToDirectory(zfn, pat)
        Catch ex As exception
        End Try
    Next
End Function

需要获取解压缩的文件数(尝试)而不是存档数量,可以更改此行:

unpackAll += 1

到此:

unpackAll += ZipFile.Open(zfn, ZipArchiveMode.Read).Entries.Count

答案 1 :(得分:0)

NET4.5具有ZipFile.ExtractToDirectory(导入System.IO.Compression.ZipFile),因此您可以枚举文件夹中的zip存档(Directory.GetFiles(Path,“* .zip”)并提取每个文件夹。对于较旧的框架,我推荐使用SharpZipLib。两者都做同样的工作,但我会尽可能坚持本土方法,因为它只需要分发一个库。