je cherchais un code pour zipper dézipper un dossier contenant des fichiers
et des sous dossiers, en utilisant ICSharpCode.SharpZipLib.dll.
J'ai pas vraiment trouvé alors je me le suis fait.
Source / Exemple :
Imports ICSharpCode.SharpZipLib.Zip
Imports System.IO
Module Module1
Sub Main()
' Compresse le dossier DossierOriginal(contient fichiers et sous dossiers) en Dossier.zip
compression("c:\DossierOriginal", "c:\Dossier.zip")
' Décompresse Dossier.zip dans le dossier DossierResultat (ce dossier doit exister)
decompression("c:\DossierResultat", "c:\Dossier.zip")
End Sub
Public Sub compression(ByVal DirectoryToZip As String, ByVal TheZipFile As String)
Dim i As Integer ' index des fichiers de filestozip()
Dim mylength As Integer ' longueur fichier
' recupère le nom complet de tous les fichiers dans filestozip()
Dim filestozip() As String = Directory.GetFiles(DirectoryToZip, "*.*", SearchOption.AllDirectories)
' mydirname : nom de la directory a compresser
Dim mydirname As String = New DirectoryInfo(DirectoryToZip).Name
' on cree la sortie zip
Dim ZipStream As ZipOutputStream = New ZipOutputStream(File.Create(TheZipFile))
' on fait le boulot pour touss les fichiers
For i = 0 To UBound(filestozip)
' on ouvre le fichier en lecture
Dim fs As FileStream = File.OpenRead(filestozip(i))
mylength = fs.Length
' Tableau de byte, de la taille du fichier à lire
Dim buffer As Byte() = New Byte(mylength) {}
' Lecture du fichier dans buffer puis fermeture
fs.Read(buffer, 0, mylength)
fs.Close()
' definition de l'entrée dans le zip
Dim entry As ZipEntry = New ZipEntry(mydirname & filestozip(i).Replace(DirectoryToZip, ""))
' On ajoute la nouvelle entrée
ZipStream.PutNextEntry(entry)
' On crée la nouvelle entrée dans l'archive
ZipStream.Write(buffer, 0, mylength)
Next
'On ferme le flux
ZipStream.Finish()
ZipStream.Close()
End Sub
Public Sub decompression(ByVal destinationDirectory As String, ByVal myzipfile As String)
' on cree l'entree zip
Dim zipIStream As ZipInputStream = New ZipInputStream(File.OpenRead(myzipfile))
Dim theEntry As ZipEntry
' pour toutes les entrees
Do While (1)
' recuperation de l'entree
theEntry = zipIStream.GetNextEntry()
' si l'entree vaut nothing => c'est fini
If theEntry Is Nothing Then Exit Do
' test si l'entrée est un fichier
If theEntry.IsFile Then
' definition du fichier de sortie
Dim myFile As New FileInfo(destinationDirectory & "\" & theEntry.Name)
' on crée le(s) répertoire(s) si besoin
Directory.CreateDirectory(myFile.DirectoryName)
' creation du fichier de sortie
Dim fs As FileStream = New FileStream(myFile.FullName, FileMode.Create)
Dim size As Integer = 2048
Dim data As Byte() = New Byte(size) {}
Do Until (size <= 0)
size = zipIStream.Read(data, 0, data.Length)
fs.Write(data, 0, size)
Loop
fs.Flush()
fs.Close()
End If
Loop
' on ferme le flux
zipIStream.Close()
End Sub
End Module
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.