ZIPPER AVEC SHARPZIPLIB

Signaler
Messages postés
18
Date d'inscription
jeudi 7 juin 2001
Statut
Membre
Dernière intervention
19 avril 2010
-
Messages postés
14
Date d'inscription
lundi 17 mars 2003
Statut
Membre
Dernière intervention
7 septembre 2010
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/25357-zipper-avec-sharpziplib

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 !
Afficher les 15 commentaires