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

Soyez le premier à donner votre avis sur cette source.

Vue 8 663 fois - Téléchargée 845 fois

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

Ajouter un commentaire

Commentaires

cs_Patrice99
Messages postés
1222
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Pour avoir certains options en plus, voir aussi :
VBWinBackup : Sauvegarde d'une arborescence de fichiers
www.vbfrance.com/code.aspx?ID=36613
- Création d'un fichier zip de taille > 2 Go (requiert une version >= 0.85 de SharpZipLib.dll) ;
- Conservation des attributs des fichiers et dossiers (requiert une version >= 0.83 de SharpZipLib.dll) ;
- Conservation des dossiers vides ;
- Conservation des accents dans les noms de fichier et dossier.
lilou449
Messages postés
1
Date d'inscription
dimanche 12 décembre 2010
Statut
Membre
Dernière intervention
28 février 2011
-
Merci pour cette API =)
GregYoung
Messages postés
29
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
23 décembre 2018
-
Merci l'ami.. Très utile pour ce que j'ai à en faire.
Cependant petit bémol concernant l'instruction :
Do While (1)

Comme VB n'aimait pas ça, je l'ai modifié par :
Do While zipIStream.CanRead

Maintenant, c'est parfait !
Merci à toi !

PS : Si tu as un moyen pour protéger par mot de passe l'archive, je suis preneur ;-)
GregYoung
Messages postés
29
Date d'inscription
samedi 21 avril 2018
Statut
Membre
Dernière intervention
23 décembre 2018
-
Oups.. Oubli d'évaluation. Voilà qui est fait.

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.