步驟一:加入[ICSharpCode.SharpZipLib.dll]元件
步驟二:將下列程式加入Class
Imports System Imports System.Collections.Generic Imports System.Text Imports System.IO Imports ICSharpCode.SharpZipLib.Zip
Public Class Zip
''' <summary> ''' 壓縮整個資料夾 ''' </summary> ''' <param name="SourceDir">要壓縮的資料夾(完整路徑) </param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> ''' <param name="Password">密碼</param> ''' <param name="BackupOldFile">是否備份舊檔案</param> Public Sub ZipDir(ByVal SourceDir As String, ByVal TargetFile As String, ByVal Password As String, ByVal BackupOldFile As Boolean) Dim oZipDir As New ICSharpCode.SharpZipLib.Zip.FastZip() Try If Not Directory.Exists(SourceDir) Then Throw New Exception("資料夾不存在!") End If
If BackupOldFile = True Then '判斷要產生的ZIP檔案是否存在 If File.Exists(TargetFile) = True Then '原本的檔案存在,把他ReName File.Copy(TargetFile, TargetFile & "-" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".back") File.Delete(TargetFile) End If End If
If Password <> "" Then oZipDir.Password = Password End If oZipDir.CreateZip(TargetFile, SourceDir, True, "") Catch Throw End Try End Sub
''' <summary> '''壓縮整個資料夾 ''' </summary> ''' <param name="SourceDir">要壓縮的資料夾(完整路徑) </param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> ''' <param name="Password">密碼</param> Public Sub ZipDir(ByVal SourceDir As String, ByVal TargetFile As String, ByVal Password As String) Me.ZipDir(SourceDir, TargetFile, Password, True) End Sub
''' <summary> '''壓縮整個資料夾 ''' </summary> ''' <param name="SourceDir">要壓縮的資料夾(完整路徑) </param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> Public Sub ZipDir(ByVal SourceDir As String, ByVal TargetFile As String) Me.ZipDir(SourceDir, TargetFile, "", True) End Sub
''' <summary> ''' 壓縮檔案 ''' </summary> ''' <param name="SourceFiles">要壓縮的檔案(完整路徑)</param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> ''' <param name="Password">密碼</param> ''' <param name="BackupOldFile">是否備份舊檔案</param> Public Sub ZipFiles(ByVal SourceFiles As String(), ByVal TargetFile As String, ByVal Password As String, ByVal BackupOldFile As Boolean) Try If SourceFiles Is Nothing OrElse SourceFiles.Length <= 0 Then Throw New Exception("並未傳入檔案完整路徑") End If
For i As Integer = 0 To SourceFiles.Length - 1 If File.Exists(SourceFiles(i)) = False Then Throw New Exception("要壓縮的檔案【" & SourceFiles(i) & "】不存在") End If Next
If BackupOldFile = True Then '判斷要產生的ZIP檔案是否存在 If File.Exists(TargetFile) = True Then '原本的檔案存在,把他ReName File.Copy(TargetFile, TargetFile & "-" & DateTime.Now.ToString("yyyyMMddHHmmss") & ".back") File.Delete(TargetFile) End If End If
Dim zs As New ZipOutputStream(File.Create(TargetFile)) zs.SetLevel(9) '壓縮比 If Password <> "" Then zs.Password = Password End If
For i As Integer = 0 To SourceFiles.Length - 1 Dim s As FileStream = File.OpenRead(SourceFiles(i)) Dim buffer As Byte() = New Byte(s.Length - 1) {} s.Read(buffer, 0, buffer.Length) Dim Entry As New ZipEntry(Path.GetFileName(SourceFiles(i))) Entry.DateTime = DateTime.Now Entry.Size = s.Length s.Close() zs.PutNextEntry(Entry) zs.Write(buffer, 0, buffer.Length) Next zs.Finish() zs.Close() Catch Throw End Try End Sub
''' <summary> ''' 壓縮檔案 ''' </summary> ''' <param name="SourceFiles">要壓縮的檔案(完整路徑)</param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> ''' <param name="Password">密碼</param> Public Sub ZipFiles(ByVal SourceFiles As String(), ByVal TargetFile As String, ByVal Password As String) Me.ZipFiles(SourceFiles, TargetFile, Password, True) End Sub
''' <summary> ''' 壓縮檔案 ''' </summary> ''' <param name="SourceFiles">要壓縮的檔案(完整路徑)</param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> Public Sub ZipFiles(ByVal SourceFiles As String(), ByVal TargetFile As String) Me.ZipFiles(SourceFiles, TargetFile, "", True) End Sub
''' <summary> ''' 壓縮單一檔案 ''' </summary> ''' <param name="SourceFiles">要壓縮的檔案(完整路徑)</param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> ''' <param name="Password">密碼</param> ''' <param name="BackupOldFile">是否備份舊檔案</param> Public Sub ZipFile(ByVal SourceFile As String, ByVal TargetFile As String, ByVal Password As String, ByVal BackupOldFile As Boolean) Me.ZipFiles(New String() {SourceFile}, TargetFile, Password, BackupOldFile) End Sub
''' <summary> ''' 壓縮單一檔案 ''' </summary> ''' <param name="SourceFiles">要壓縮的檔案(完整路徑)</param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> ''' <param name="Password">密碼</param> Public Sub ZipFile(ByVal SourceFile As String, ByVal TargetFile As String, ByVal Password As String) Me.ZipFile(SourceFile, TargetFile, Password, True) End Sub
''' <summary> ''' 壓縮單一檔案 ''' </summary> ''' <param name="SourceFiles">要壓縮的檔案(完整路徑)</param> ''' <param name="TargetFile">要產生的Zip檔案(完整路徑檔名)</param> ''' <returns></returns> Public Sub ZipFile(ByVal SourceFile As String, ByVal TargetFile As String) Me.ZipFile(SourceFile, TargetFile, "", True) End Sub
''' <summary> ''' 解壓縮 ''' </summary> ''' <param name="SourceFile">要解壓縮的Zip檔案(完整路徑檔名) </param> ''' <param name="TargetDir">解壓縮後存放的資料夾路徑(完整路徑) </param> ''' <param name="Password">密碼</param> Public Sub ExtractZip(ByVal SourceFile As String, ByVal TargetDir As String, ByVal Password As String) Dim oZip As New ICSharpCode.SharpZipLib.Zip.FastZip() Try '判斷要產生的ZIP檔案是否存在 If File.Exists(SourceFile) = False Then Throw New Exception("要解壓縮的檔案【" & SourceFile & "】不存在,無法執行") End If If Password <> "" Then oZip.Password = Password End If oZip.ExtractZip(SourceFile, TargetDir, "") Catch Throw End Try End Sub
''' <summary> ''' 解壓縮 ''' </summary> ''' <param name="SourceFile">要解壓縮的Zip檔案(完整路徑檔名) </param> ''' <param name="TargetDir">解壓縮後存放的資料夾路徑(完整路徑) </param> Public Sub ExtractZip(ByVal SourceFile As String, ByVal TargetDir As String) Me.ExtractZip(SourceFile, TargetDir, "") End Sub
End Class
|