GESTION COMPLÈTE DE ZIP - ZIPDEZIP

Signaler
Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018
-
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

Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

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.
Messages postés
46
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
5 juin 2010

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
Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

Ok merci, mais mes 2 autres questions ?
Messages postés
46
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
5 juin 2010

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...
Afficher les 6 commentaires