GESTION COMPLÈTE DE ZIP - ZIPDEZIP

cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018 - 19 févr. 2010 à 09:30
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018 - 22 févr. 2010 à 12:16
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/51321-gestion-complete-de-zip-zipdezip

cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
22 févr. 2010 à 12:16
Ok, cela utilise les flux compressés de DotNet, merci pour les infos. Pour que je mette une note, il faudrait que je compare l'intérêt de ta méthode par rapport à ICSharpCode.SharpZipLib.dll que j'ai l'habitude d'utiliser, mais à première vue ton travail à l'air impressionnant, bravo.
cs_zozo14 Messages postés 46 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 5 juin 2010
22 févr. 2010 à 11:40
Oui, j'ai fait ça tout seul,en autodidacte que je suis, en reprenant les infos sur la structure du Zip dans appnotes..
Les modules de compression/decompression ne sont pas de moi.
... si tu veux me récompenser par une note ... ça faut toujours plaisir...

=> Pour les gros fichiers >2go : voir ci-dessous, si ça peut t'interesser...

Public Function Compresse(ByVal Source As String, ByVal Destination As String) As Long
Try
Dim taillef = taille(Source)
Dim bloc As Integer
If taillef > &HFFFFFFFF Then
bloc = Int32.MaxValue \ 100 'limiter la taille du tampon à 1 centième du maximum de maxint32
Else
If taillef \ 1024 > 0 Then bloc = taillef \ 1024 Else bloc = taillef 'car taillef\1024 peut être nul pour les petits fichiers
End If
Dim lecteur As New BinaryReader(File.OpenRead(Source))
Dim GData(bloc) As Byte
Dim passe As Integer
Dim nb As Long = 0
Dim encore As Boolean
Dim scripteur As FileStream = New FileStream(Destination, FileMode.Create, FileAccess.Write, FileShare.Write)
Dim Zipeur As DeflateStream = New DeflateStream(scripteur, CompressionMode.Compress)
lecteur.BaseStream.Seek(0, SeekOrigin.Begin)

passe = lecteur.Read(GData, 0, bloc)
Zipeur.Write(GData, 0, passe)
nb = nb + passe
suivi("", nb, False, False)
encore = passe < lecteur.BaseStream.Length
Do While (encore)
passe = lecteur.Read(GData, 0, GData.Length)
If passe > 0 Then
scripteur.Write(GData, 0, passe)
nb = nb + passe
End If
encore = passe > 0
Loop
lecteur.Close()
Zipeur.Close()
Return taille(Destination)
Catch ex As Exception
MsgBox("Erreur Compression :" + ex.Message + Chr(10) + ex.StackTrace)
Return 0
End Try
End Function
Public Function Decompresse(ByVal Source As String, ByVal Destination As String) As Long
Dim Lecteur As New BinaryReader(File.OpenRead(Source))
Dim Zipeur As DeflateStream = New DeflateStream(Lecteur.BaseStream, CompressionMode.Decompress)
Dim Scripteur As New BinaryWriter(File.Create(Destination))

Try
Dim taillef = taille(Source)
Dim bloc As Integer
If taillef > Int32.MaxValue Then
bloc = Int32.MaxValue \ 100 'limiter la taille du tampon à 1 centième du maximum de maxint32
Else
If taillef \ 1024 > 0 Then bloc = taillef \ 1024 Else bloc = taillef 'car taillef\1024 peut être nul pour les petits fichiers
End If
Dim Gdata(bloc) As Byte
Dim Passe As Integer
Dim nb As Long
Dim encore As Boolean = True
Do
Passe = Zipeur.Read(Gdata, 0, Gdata.Length)
nb = Passe
If Passe > 0 Then
encore = True
Scripteur.Write(Gdata, 0, Passe)
nb = nb + Passe
Else
encore = False
End If
Loop While (encore)
Lecteur.Close()
Scripteur.Close()
Zipeur.Close()
Return taille(Destination)
Catch ex As Exception
Lecteur.Close()
Scripteur.Close()
Zipeur.Close()
MsgBox("Erreur décompression :" + ex.Message + Chr(10) + ex.StackTrace)
Return 0
End Try
End Function
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
20 févr. 2010 à 12:14
Ok merci, mais mes 2 autres questions ?
cs_zozo14 Messages postés 46 Date d'inscription jeudi 2 novembre 2006 Statut Membre Dernière intervention 5 juin 2010
20 févr. 2010 à 11:11
pour répondre aux commentaires :
Nouveau zip avec dossier image...
A vous d'adapter aux autres structures de fichiers compressés, j'ai eu assez de travail avec
les ZIP pour cette application...
L'intégrité du Zip est testé par la demande de la structure du Zip, par le menu fichier..
Pour la plupart des fonctions, les fichiers sont traités en stream, mais cela peut devenir plus long pour les gros fichiers...
cs_bidouille007 Messages postés 257 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 22 décembre 2012 1
19 févr. 2010 à 11:44
Bonjour

Il existe pas un équivalent pour les fichiers .rar ou 7z ?

Mais sinon ca à l'air plutôt sympa comme code
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
19 févr. 2010 à 09:30
Salut, le dossier images est vide. Est-ce que la vérification du zip est possible ? (intégrité) Est-ce que les zip de + de 2 Go sont gérés ? Tu as tout redéveloppé tout seul ?
Rejoignez-nous