Zipper avec sharpziplib

Soyez le premier à donner votre avis sur cette source.

Snippet vu 20 998 fois - Téléchargée 36 fois

Contenu du snippet

Voilà un code qui permet de zipper des fichier aprés avoir référencé la dll de SharpZipLib ( ICSharpCode.SharpZipLib.dll )telechargeable à http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx .
Je n'ai rien trouvé de comparable sur vbfrance alors j'ajoute ma contribution.
Le code n'est pas commenté, je viens juste de le faire ! c'est court mais ça fonctionne...

Source / Exemple :


Imports ICSharpCode.SharpZipLib.Zip
Imports System.io

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        Dim MyZipEntry As ZipEntry
        Dim MyZipOutputStream As ZipOutputStream
        Dim MyFileStream As FileStream
        Dim buffer(4096) As Byte
        Dim count As Integer
        Dim i As Integer
        Dim Fichiers(2) As String

        Fichiers(0) = "c:\test.txt"
        Fichiers(1) = "c:\test2.txt"
        Fichiers(2) = "c:\test3.txt"

        MyZipOutputStream = New 
ZipOutputStream((File.Create("c:\test.zip")))

        MyZipOutputStream.SetLevel(5) ' Niveau de compression

        For i = 0 To UBound(Fichiers)
            If File.Exists(Fichiers(i)) Then
                ' Ouverture en lecture du fichier à zipper 
                MyFileStream = File.OpenRead(Fichiers(i))

                ' Enregistrement dans le zip de la référence du fichier 
d'entrée
                MyZipEntry = New 
ZipEntry(Path.GetFileName(Fichiers(i)))
                MyZipOutputStream.PutNextEntry(MyZipEntry)

                ' Lecture et zip du fichier par blocs de 4096 bytes
                count = MyFileStream.Read(buffer, 0, 4096)
                While (count > 0)
                    MyZipOutputStream.Write(buffer, 0, count)
                    count = MyFileStream.Read(buffer, 0, 4096)
                End While
            End If
        Next i

        MyFileStream.Flush()
        MyFileStream.Close()
        MyZipOutputStream.Close()
    End Sub

Conclusion :


ATTENTION : il faut que les fichiers test.txt existent... enfin ça on peut ajouter un test pour savoir...
Sinon je me suis inspiré de l'aide fournie avec la librairie téléchargée. ( exemple en C# )

... et juste pour dire que c'est la 1ere source que je met... j'espére qu'elle servira...

A voir également

Ajouter un commentaire

Commentaires

Messages postés
14
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
7 septembre 2010

Bonne base mais avec des fichiers textes genre 1ko ca ne fonctionne pas
Messages postés
8
Date d'inscription
lundi 29 décembre 2003
Statut
Membre
Dernière intervention
2 août 2007

Windows ne sais pas lire les fichiers généré par ton code.
Pour ça, il faut prendre en charge le calcul du crc (qui n'est pas fait automatiquement)

J'en profite par la même occasion pour donner un exemple dans lequel on peut creer une petite architecture de fichiers (je veux dire, mettre des dossiers dans le zip)

'source trouvée sur http://www.thescripts.com/forum/thread554580.html et posté par Chad.
' Je l'ai à peine modifié.


Imports System.IO
Imports ICSharpCode.SharpZipLib.Checksums
Imports ICSharpCode.SharpZipLib.Zip
Imports ICSharpCode.SharpZipLib.GZip


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

' Try
Directory.SetCurrentDirectory("ton répertoire")
Dim objCrc32 As New Crc32()
Dim zos As ZipOutputStream

zos = New ZipOutputStream(File.Create("c:/test.zip")) 'yourzipfile()

' il faut mettre les noms relatifs pour que Windows puisse lire le fichier zip correctement (d'où la modif du currentdirectory)
Dim strFile() As String = {"fichier1.txt", "fichier2.doc", "images/fichier3.jpg"} 'vous créez votre tableau comme vous voulez, c'est juste un tableau...


For i As Integer = 0 To strFile.Length - 1 'on parcours le tableau, et pour chaque fichier,
'on l'insère dans dans notre zip (objet zos) avec la méthode Putnextentry, après avec ajouté la date de l'ajout, calculé la taille du fichier ainsi que le crc.


Dim strmFile As FileStream = File.OpenRead(strFile(i)) 'fichier i
Dim abyBuffer(CInt(strmFile.Length - 1)) As Byte 'buffer qui fait la taille du fichier (donc suffisamment grand, pas besoin de s'embeter à recréer un autre buffer)
strmFile.Read(abyBuffer, 0, abyBuffer.Length) 'on lit le fichier( en le mettant dans en mémoire dans le buffer : attention pour les gros fichier)
Dim objZipEntry As ZipEntry = New ZipEntry(strFile(i)) 'on créer à partir du fichier un objet ZipEntry
objZipEntry.DateTime = DateTime.Now
objZipEntry.Size = strmFile.Length
strmFile.Close() 'on a plus besoin du fichier, alors on libère la mémoire
objCrc32.Reset()
objCrc32.Update(abyBuffer)
objZipEntry.Crc = objCrc32.Value ' on calcul le crc
zos.PutNextEntry(objZipEntry) ' on insérer l'object ZipEntry (notre fichier quoi) au zip
zos.Write(abyBuffer, 0, abyBuffer.Length) 'on l'écrit
Next


zos.Finish()
zos.Close()

messagebox.show ("ok")

Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Messages postés
454
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
18 avril 2007
2
OK merci
Messages postés
6
Date d'inscription
mardi 18 novembre 2003
Statut
Membre
Dernière intervention
8 novembre 2004

De rien.
Donc non ça n'est pas copié collé. Je l'ai fait parce que, justement, je n'ai pas trouvé de code équivalent sur le net! ( Mais je ne dois surement pas être le seul !!!)

Comme je le disais plus haut à l'époque, j'ai utilisé le bout de code pour une appli à but d'archivage (un batch sur un serveur d'archivage). Les zip créés étaient ouverts par winzip.
D'ailleurs j'ai fait ça en stage et j'ai su il y a pas longtemps que l'appli était toujours utilisée !
Messages postés
454
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
18 avril 2007
2
Merci pour ce code, mais peut-être pas un peu copier collé ?^^:)
par contre, comment on fait pour dézipper ?
Afficher les 15 commentaires

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.