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