|
Trouver une ressource
Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !
MODULE ZLIB - LA COMPRESSION FACILE... (OU DECOMPRESSION)
Information sur la source
Description
Je sais que de telles sources existent déjà sur le site, mais là, ca gère tout en mémoire, sans créer de fichier temporaire. Ce module permet de compresser/décompresser très facilement vos données depuis et vers des tableaux d'octets.
Source
- Public Function CompressData(ByRef vxbInput() As Byte, ByRef vxbOutput() As Byte, Optional vnStart As Long = 0, Optional vnMaxSize As Long = 0, Optional veCompressionLevel As ZLIB_CompressionLevelConstants = Z_DEFAULT_COMPRESSION) As Boolean
- Dim tStream As zStream
- Dim rc As Long
- Dim xbCopy() As Byte
- With tStream
- '# On initialise les parametres de la structure stream
- If deflateInit(tStream, veCompressionLevel, ZLIB_Version, Len(tStream)) = 0 Then
- CompressData = True
- '# Les données sont a prendre dans le tableau en entrée
- CopyMemory rc, ByVal ArrPtr(vxbInput), 4
- If rc Then
- CopyMemory .avail_in, ByVal rc + 16, 4
- .avail_in = .avail_in - vnStart
- End If
- If .avail_in > 0 And vnStart < .avail_in Then
- '# Doit-on prendre tout le tableau ?
- If vnMaxSize <> 0 And vnMaxSize < .avail_in Then
- .avail_in = vnMaxSize
- End If
- .next_in = VarPtr(vxbInput(vnStart))
-
- '# On regarde ou sont les données du tableau de sortie.
- '# Pas de VarPtr ici car ce tableau peut etre vide, ca évite un On Error ^^
- CopyMemory rc, ByVal ArrPtr(vxbOutput), 4
- If rc Then
- CopyMemory rc, ByVal rc + 12, 4
-
- If rc + vnStart = .next_in Then
- '# Le tableau d'entrée et le tableau de sortie pointent au même endroit...
- '# ca ne va "pas le faire" ...
- xbCopy = vxbInput
- .next_in = VarPtr(xbCopy(vnStart))
- ElseIf vnStart Then
- '# On recopie le début du tableau
- ReDim vxbOutput(vnStart - 1)
- CopyMemory vxbOutput(0), vxbInput(0), vnStart - 1
- End If
- Else
- vxbOutput = vxbInput
- End If
-
- .avail_out = .avail_in + 12
- '# On agrandit le tableau de sortie
- ReDim Preserve vxbOutput(.total_out - 1 + .avail_out + vnStart)
- '# Les nouvelles données décompressées seront placées à la suite, dans le tableau...
- .next_out = VarPtr(vxbOutput(vnStart + .total_out))
-
- '# Lance la décompression a proprement parler
- CompressData = deflate(tStream, 4) = 1
-
- If .total_out Or vnStart Then
- ReDim Preserve vxbOutput(.total_out + vnStart - 1)
- Else
- Erase vxbOutput
- End If
- End If
-
- '# Fin de l'utilisation de ZLib
- deflateEnd tStream
- End If
- End With
- End Function
Public Function CompressData(ByRef vxbInput() As Byte, ByRef vxbOutput() As Byte, Optional vnStart As Long = 0, Optional vnMaxSize As Long = 0, Optional veCompressionLevel As ZLIB_CompressionLevelConstants = Z_DEFAULT_COMPRESSION) As Boolean
Dim tStream As zStream
Dim rc As Long
Dim xbCopy() As Byte
With tStream
'# On initialise les parametres de la structure stream
If deflateInit(tStream, veCompressionLevel, ZLIB_Version, Len(tStream)) = 0 Then
CompressData = True
'# Les données sont a prendre dans le tableau en entrée
CopyMemory rc, ByVal ArrPtr(vxbInput), 4
If rc Then
CopyMemory .avail_in, ByVal rc + 16, 4
.avail_in = .avail_in - vnStart
End If
If .avail_in > 0 And vnStart < .avail_in Then
'# Doit-on prendre tout le tableau ?
If vnMaxSize <> 0 And vnMaxSize < .avail_in Then
.avail_in = vnMaxSize
End If
.next_in = VarPtr(vxbInput(vnStart))
'# On regarde ou sont les données du tableau de sortie.
'# Pas de VarPtr ici car ce tableau peut etre vide, ca évite un On Error ^^
CopyMemory rc, ByVal ArrPtr(vxbOutput), 4
If rc Then
CopyMemory rc, ByVal rc + 12, 4
If rc + vnStart = .next_in Then
'# Le tableau d'entrée et le tableau de sortie pointent au même endroit...
'# ca ne va "pas le faire" ...
xbCopy = vxbInput
.next_in = VarPtr(xbCopy(vnStart))
ElseIf vnStart Then
'# On recopie le début du tableau
ReDim vxbOutput(vnStart - 1)
CopyMemory vxbOutput(0), vxbInput(0), vnStart - 1
End If
Else
vxbOutput = vxbInput
End If
.avail_out = .avail_in + 12
'# On agrandit le tableau de sortie
ReDim Preserve vxbOutput(.total_out - 1 + .avail_out + vnStart)
'# Les nouvelles données décompressées seront placées à la suite, dans le tableau...
.next_out = VarPtr(vxbOutput(vnStart + .total_out))
'# Lance la décompression a proprement parler
CompressData = deflate(tStream, 4) = 1
If .total_out Or vnStart Then
ReDim Preserve vxbOutput(.total_out + vnStart - 1)
Else
Erase vxbOutput
End If
End If
'# Fin de l'utilisation de ZLib
deflateEnd tStream
End If
End With
End Function
Fichier Zip
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
Télécharger le zip
Historique
- 24 août 2007 04:16:40 :
- les donnes seront normallement traitées plus vite.
- 24 août 2007 04:31:50 :
- erreur avec le fichier Zip
Sources du même auteur
Sources de la même categorie
Sources en rapport avec celle ci
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Compression [ par eldim ]
Bonjour,Est-ce quelqu'un connait un programme zip qui vérifie si un fichier existe déja dans un zip et compare les versions avant d'ajouter
Algorithme de compression (ZIP RAR ACE....) [ par Fildomen ]
Salutje veux me lancer dans un prog de compression, masi je ne trouve pas de doc, s'il vous plait passez moi un lien sur les algorihmes de n'importe e
Compression / décompression [ par nicolasheurtevin ]
Bonjour, J'ai quelques petits soucis après avoir essayé différents bouts de code permettant la compression zip et la décompressi
Problème Compression zip [ par Taurus67 ]
Bonjour, je fait un petit logiciel qui doit compresser en zip des demos (.dem) ( counter strike ) une fois que celle ci ont fini d'être enregistr
Compression ZIP VB.NET 2003 [ par eldim ]
Bonjour,Je dispose de la class "ICSharpCode.SharpZipLib.Zip" pour compresser mes fichier en VB.NET.Y a-t-il un moyen de vérifier si un fichier ex
VBA Excel - Recherche de fichiers [ par econs ]
Bonjour à toutes et tous. Je possède un dossier contenant un certain nombre de fichiers : - Un fichier Visio &nbs
Compression/Decompression avec crc en VB.net [ par serey ]
Bonjour,je souhaiterai compresser et decompresser des fichiers en vb et cela avec un crc pour vérifier l'integrité de mes fichiers. Comment
problème de zip [ par pseudoOM ]
Salut à tous j'ai un très gros problème.Dans mon programme je clique sur un bouton et je zip un fichier avec une fonction que j'ai trou
Vraiment débutant [ par ptilou54 ]
BonjourVoila je recherchais sur le net un simulateur de PID et je l'ai trouver sur ce site alors j'ai télécharger le fichier zip mais je ne
Application.FileSearch d'un fichier .zip [ par CerberusPau ]
A priori ça a l'air correct ... C'est vrai pour un fichier avec une extension .doc, .bak, .old par exemple...Mais ça ne marche pas avec une
|
Téléchargements
Logiciels à télécharger sur le même thème :
Comparez les prix Nouvelle version
|