有没有人知道将文件夹中的多个zip文件解压缩到一个位置的最佳方法。例如,最好使用codeplex dll,还是尝试使用最新的.net框架?谢谢,VBvirg。
答案 0 :(得分:1)
在最后一次通信之后的方式,但如果有人偶然发现这个仍然感兴趣,这里是如何做到的。
确保您使用的是.NET Framework 4.5或更高版本,并且已包含对System.IO.Compression
和System.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。两者都做同样的工作,但我会尽可能坚持本土方法,因为它只需要分发一个库。