步驟一:加入[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

 

 

arrow
arrow
    全站熱搜

    M 發表在 痞客邦 留言(0) 人氣()