Imaginsystems


Tecniche di Programmazione - Codici Sorgenti - News Informatiche
Archivio Posts
Anno 2014

Anno 2013

Anno 2012
Statistiche
  • Views Home Page: 54.952
  • Views Posts: 418.967
  • Views Gallerie: 0
  • n° Posts: 210
  • n° Commenti: 224

VB.NET - CREARE ED ESTRARRE FILE ZIP CON DotNetZip Librery (Codice)

VB.NET - CREARE ED ESTRARRE FILE ZIP CON DotNetZip Librery (Codice)


Oggi vi voglio mettere a disposizione un progetto che utilizza la Libreria DotNetZip che permette di creare file Zip e quindi comprimere ma anche Estrarre i file Zip.

Ho creato quattro tipi di funzioni :

ComprimiFileZip(....)
ComprimiArrayFileZip(....)
ComprimiAllDirectory(....)
        DecomprimereFileZip(....)


CODICE VISUAL STUDIO 2010 - VISUAL BASIC .NET - VB.NET

Imports Ionic.Zip

Public Class ProjectZip


    ''' <summary>
    ''' Funzione che Comprime i File uno alla volta e crea un File Zippato con la Destinazione scelta
    ''' </summary>
    ''' <param name="FileNameAdd">Percorso e Nome del File da Zippare (ex: "c:\TestoWord.pdf")</param>
    ''' <param name="DestinazioneFileZip">Percorso  Nome del File Zip (ex: "c:\ZipFileWord.pdf") </param>
    ''' <param name="Password">Opzionale Password se nel caso si vuole criptare il File Zip AES256</param>
    ''' <param name="CryptPasswordMD5">True = Attiva Criptaggio Password MD5 ; False = Disattivato Criptaggio Password</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function ComprimiFileZip(ByVal FileNameAdd As String, ByVal DestinazioneFileZip As String, Optional ByVal Password As String = Nothing, Optional ByVal CryptPasswordMD5 As Boolean = False) As Boolean
        Try
            Dim Zip As New ZipFile()

            Zip.ZipErrorAction = Ionic.Zip.ZipErrorAction.Skip
            Zip.Comment = "Descrizione File Zip : " & FileNameAdd.Substring(3, FileNameAdd.Length - 7)

            If Password <> Nothing Then
                If CryptPasswordMD5 = True Then
                    Password = stringtomd5(Password)
                End If
                Zip.Encryption = Ionic.Zip.EncryptionAlgorithm.WinZipAes256
                Zip.Password = Password
            End If

            Zip.AddFile(FileNameAdd)
            Zip.Save(DestinazioneFileZip)
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function
    ''' <summary>
    ''' Funzione che Comprime i un Array di File  e crea un File Zippato con la Destinazione scelta 
    ''' </summary>
    ''' <param name="ArrayFileZip">Array di List Of String che contine tutti i Percorsi e Nomi dei File da Comprimere</param>
    ''' <param name="DestinazioneFileZip">Percorso  Nome del File Zip (ex: "c:\ZipFileWord.pdf")</param>
    ''' <param name="Password">Opzionale Password se nel caso si vuole criptare il File Zip AES256</param>
    ''' <param name="CryptPasswordMD5">True = Attiva Criptaggio Password MD5 ; False = Disattivato Criptaggio Password</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function ComprimiArrayFileZip(ByVal ArrayFileZip As List(Of String), ByVal DestinazioneFileZip As String, Optional ByVal Password As String = Nothing, Optional ByVal CryptPasswordMD5 As Boolean = False) As Boolean
        Try
            Dim Zip As New ZipFile()

            Zip.ZipErrorAction = Ionic.Zip.ZipErrorAction.Skip
            Zip.Comment = "Descrizione File Zip : "

            For i As Integer = 0 To ArrayFileZip.Count - 1
                Zip.Comment = Zip.Comment & ArrayFileZip(i).Substring(3, ArrayFileZip(i).Length - 3).ToString & " - "
            Next

            If Password <> Nothing Then
                If CryptPasswordMD5 = True Then
                    Password = stringtomd5(Password)
                End If
                Zip.Encryption = Ionic.Zip.EncryptionAlgorithm.WinZipAes256
                Zip.Password = Password
            End If

            Zip.AddFiles(ArrayFileZip)
            Zip.Save(DestinazioneFileZip)
            Return True
        Catch ex As Exception
            Return False
        End Try
    End Function
    ''' <summary>
    ''' Funzione che Decomprime i File Zip e li Estrae in una unica Cartella
    ''' </summary>
    ''' <param name="SourceFileZip">File Zip Sorgnte (ex: "c:\ZipTempWord.zip")</param>
    ''' <param name="FolderExstratFileZip">Directory Upzip (ex:"c:\TempWord")</param>
    ''' <param name="Password"> Opzionale inserire password del File Zip</param>
    ''' <param name="CryptPasswordMD5">True = Attiva Criptaggio Password MD5 ; False = Disattivato Criptaggio Password</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function DecomprimereFileZip(ByVal SourceFileZip As String, ByVal FolderExstratFileZip As String, Optional ByVal Password As String = Nothing, Optional ByVal CryptPasswordMD5 As Boolean = False) As Boolean
        Try
            Using Zip As ZipFile = ZipFile.Read(SourceFileZip)

                If Password <> Nothing Then
                    If CryptPasswordMD5 = True Then
                        Password = stringtomd5(Password)
                    End If
                    Zip.Encryption = Ionic.Zip.EncryptionAlgorithm.WinZipAes256
                    Zip.Password = Password
                End If

                If System.IO.Directory.Exists(FolderExstratFileZip) = False Then
                    MkDir(FolderExstratFileZip)
                End If

                Zip.ExtractAll(FolderExstratFileZip, ExtractExistingFileAction.OverwriteSilently)

            End Using

            Return True
        Catch ex As Exception
            MsgBox("Errore : " + ex.Message.ToString, MsgBoxStyle.Critical, "ATTENZIONE!! Errore Unizip File")
            Return False
        End Try
    End Function
    ''' <summary>
    ''' Funzione che Comprime tutta una Directory e le tutte le sue sotto Directory e crea un File Zippato con la Destinazione scelta 
    ''' </summary>
    ''' <param name="DirectoryNameAdd">Indicare la Directory o Cartella da comprimere (ex: "c:\Temp")</param>
    ''' <param name="DestinazioneFileZip">Percorso  Nome del File Zip (ex: "c:\ZipFileWord.pdf")</param>
    ''' <param name="Password">Opzionale Password se nel caso si vuole criptare il File Zip AES256</param>
    ''' <param name="CryptPasswordMD5">True = Attiva Criptaggio Password MD5 ; False = Disattivato Criptaggio Password</param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function ComprimiAllDirectory(ByVal DirectoryNameAdd As String, ByVal DestinazioneFileZip As String, Optional ByVal Password As String = Nothing, Optional ByVal CryptPasswordMD5 As Boolean = False) As Boolean
        Try

            Dim Zip As New ZipFile()

            Zip.ZipErrorAction = Ionic.Zip.ZipErrorAction.Skip
            Zip.Comment = "Descrizione File Zip : " & DirectoryNameAdd.Substring(3, DirectoryNameAdd.Length - 3).ToString

            If Password <> Nothing Then
                If CryptPasswordMD5 = True Then
                    Password = stringtomd5(Password)
                End If
                Zip.Encryption = Ionic.Zip.EncryptionAlgorithm.WinZipAes256
                Zip.Password = Password
            End If

            Zip.AddDirectory(DirectoryNameAdd)
            Zip.Save(DestinazioneFileZip)
            Return True

            Return True
        Catch ex As Exception
            MsgBox("Errore : " + ex.Message.ToString, MsgBoxStyle.Critical, "ATTENZIONE!! Errore Unizip File")
            Return False
        End Try
    End Function
    Private Function stringtomd5(ByVal content As String) As String

        Dim m5 As New Security.Cryptography.MD5CryptoServiceProvider
        Dim bytestring() As Byte = System.Text.Encoding.ASCII.GetBytes(content)
        bytestring = m5.ComputeHash(bytestring)
        Dim finalstring As String = Nothing
        For Each bt As Byte In bytestring
            finalstring &= bt.ToString("x2")
        Next
        Return finalstring

    End Function

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load

        If System.IO.Directory.Exists("C:\TempFolderZip") = False Then
            MkDir("C:\TempFolderZip")
        End If

        'Funzione che Comprime un File singolo 
        ComprimiFileZip("c:\TestWord.pdf", "c:\fesso.zip")
        ComprimiFileZip("c:\TestWord.pdf", "c:\fessopassword.zip", "ciufolo")

        Dim ArrayListString As New List(Of String)

        ArrayListString.Add("c:\fesso.zip")
        ArrayListString.Add("c:\fessopassword.zip")

        'Funzione che comprime più file in un unico File Zip
        ComprimiArrayFileZip(ArrayListString, "c:\arrayfilezip.zip")
        ComprimiArrayFileZip(ArrayListString, "c:\arrayfilezipèassword.zip", "1234")

        'Funzione che comprime una intera cartella e sotto cartelle in unico File Zip
        ComprimiAllDirectory("c:\temp", "c:\temp.zip")


        'Tutte le possibili casi che possono succedere e i relativi errori che appaiono
        DecomprimereFileZip("c:\fesso.zip", "C:\TempFolderZip") 'Ok
        DecomprimereFileZip("c:\fessopassword.zip", "C:\TempFolderZip") 'Errore : Generato eccezzione il file Zip richiede la Password
        DecomprimereFileZip("c:\fessopassword.zip", "C:\TempFolderZip", "ciufolo") 'Errore : Password Sbagliata Bed Password
        DecomprimereFileZip("c:\fessopassword.zip", "C:\TempFolderZip", "1234") 'Ok 

        DecomprimereFileZip("c:\arrayfilezip.zip", "C:\TempFolderZip") 'Ok
        DecomprimereFileZip("c:\arrayfilezipèassword.zip", "C:\TempFolderZip") 'Errore : Generato eccezzione il file Zip richiede la Password
        DecomprimereFileZip("c:\arrayfilezipèassword.zip", "C:\TempFolderZip", "1234") 'Ok

   
        'Ecco se nel caso aprire il file con un altro programma zip dovete usare questa stringa
        'Password = "1234" -> Criptaggio Password MD5 = 81dc9bdb52d04dc20036dbd8313ed055
        'Se utilizzate un programma diverso a questo la Password da inserire è : 81dc9bdb52d04dc20036dbd8313ed055 se avete utilizzato MD5 Criptaggio
        Debug.Print(stringtomd5("1234"))
        Debug.Print(stringtomd5("ciufolo"))

    End Sub

End Class

Potete scaricare il file d'esempio :

Password :  "ImaginSystem" 


By ImaginSystems & Queen Gin   
Categoria: VB.NET
mercoledì, 24 ott 2012 Ore. 16.59

Messaggi collegati


Ora e Data
Mappa
Blogs Amici
    Copyright © 2002-2007 - Blogs 2.0
    dotNetHell.it | Home Page Blogs
    ASP.NET 2.0 Windows 2003