Zip unzip dossier (comprenant fichier(s) et sous dossier(s)) en utilisant icsharpcode.sharpziplib.dll

Description

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

Codes Sources

A voir également

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.