la routine ZIP
Publié : mer. 01/nov./2006 20:51
Quelqu'un a t'il deja codé la routine pour zipper un fichier ?
merci
merci
Oui, je lai decouvert et c'est super.Progi1984 a écrit :Regarde PureZip de Gnozal
http://people.freenet.de/gnozal/PureZIP_.htm
http://people.freenet.de/gnozal/ (bas de page)
Code : Tout sélectionner
; -=====================================================================================-
; PureZIP test file 2
; -=====================================================================================-
;
PackTest.s = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
SourceLength = Len(PackTest)
*SourceMemoryID = AllocateMemory(SourceLength)
PokeS(*SourceMemoryID, PackTest, SourceLength)
DestinationLength = SourceLength + (SourceLength * 0.01) + 12
*DestinationMemoryID = AllocateMemory(DestinationLength)
Debug "Original size = " + Str(SourceLength)
; Pack memory area
Debug PureZIP_PackMemory(*SourceMemoryID, SourceLength, *DestinationMemoryID, @DestinationLength)
Debug "Packed size = " + Str(DestinationLength)
; Unpack memory area
Debug PureZIP_UnpackMemory(*DestinationMemoryID, DestinationLength, *SourceMemoryID, @SourceLength)
Debug "Unpacked size = " + Str(SourceLength)
UnpackTest.s = Space(SourceLength)
UnpackTest = PeekS(*SourceMemoryID, @SourceLength)
If UnpackTest = PackTest
Debug "Pack / Unpack : success"
Else
Debug "Pack / Unpack : failed"
EndIf
c'est pour un défi/challenge ou pour avoir un truc discret (routine dans l'exe) ?SPH a écrit :Quelqu'un a t'il deja codé la routine pour zipper un fichier ?
merci
demande à gnozal, je suis sûr qu'il peut faire quelquechose !Helas, il n'y a pas de "PackZipped.s"
Bin, ni l'un ni l'autre. J'avais besoin de zipper depuis un code PB des fichiers...Flype a écrit :c'est pour un défi/challenge ou pour avoir un truc discret (routine dans l'exe) ?SPH a écrit :Quelqu'un a t'il deja codé la routine pour zipper un fichier ?
merci
Code : Tout sélectionner
;petit exemple de compression zip avec la lib Pure_Zip de Gnozal
;le reste est dans le chm de Pure_Zip
;tu peux mettre ça dans une procédure et tu as ta routine
FileToZip$ = ;chemin complet du fichier ou dossier à compresser
If FileSize(FileToZip$)=-2 ;si c'est un dossier
MyZIP.s = FileToZip$+".zip"; le zip de destination
FileToZip$ = FileToZip$+"\"; ajoute le \ de fin si nécessaire
MyFilesToZIP.s = FileToZip$+"*.*"; tous types de fichiers
If PureZIP_AddFiles(MyZIP, MyFilesToZIP, #PureZIP_StorePathRelative, #PureZIP_Recursive)<>#Null; création du dossier zippé
MessageRequester("ZIP","La compression a réussie",#MB_ICONINFORMATION)
Else
MessageRequester("ERREUR","Une erreur est survenue lors de la compression",#MB_ICONEXCLAMATION)
EndIf
Else ; sinon c'est un fichier
ext$ = GetExtensionPart(FileToZip$)
MyZIP.s = RemoveString(FileToZip$,"."+ext$,1)+".zip"; on remplace l'extension par .zip
If PureZIP_AddFile(MyZIP, FileToZip$, #PureZIP_StorePathRelative); création du fichier zippé
MessageRequester("ZIP","La compression a réussie",#MB_ICONINFORMATION)
Else
MessageRequester("ERREUR","Une erreur est survenue lors de la compression",#MB_ICONEXCLAMATION)
EndIf
EndIf
Code : Tout sélectionner
chaine.s = "salut bande de taré, c'est super l'apres midi, qu'est ce qu'on regarde, à la télé, biouman et dorothé !!!"
outfilesize.l = len(chaine)
compressedsize = outfilesize + (outfilesize * 0.01) + 12
*pCompressedData = AllocateMemory(compressedsize)
If PureZIP_PackMemory(@chaine, outfilesize, *pCompressedData, @compressedsize) = #Z_OK
writedata(FIO,*pCompressedData,compressedsize)
else
; erreur
endif
Code : Tout sélectionner
origsize = TAILLE_CHAINE_NON_COMPRESSEE
*pData = AllocateMemory(origsize)
*pCompressedData = AllocateMemory(compressedsize)
if PureZIP_UnpackMemory(*pCompressedData, compressedsize.l, *pData, @origsize) = #Z_OK
; renvoie la chaine originale
debug peeks(*pData)
else
; erreur
endif
Code : Tout sélectionner
chaine.s = "salut bande de taré, c'est super l'apres midi, qu'est ce qu'on regarde, à la télé, biouman et dorothé !!!"
outfilesize.l = Len(chaine)
compressedsize = outfilesize + (outfilesize * 0.01) + 12
*pCompressedData = AllocateMemory(compressedsize)
If PureZIP_PackMemory(@chaine, outfilesize, *pCompressedData, @compressedsize) = #Z_OK
If CreateFile(0, "c:\ESKECAMARCHEUX.zip") ; Création d'un nouveau fichier...
WriteData(0,*pCompressedData,compressedsize)
CloseFile(0)
EndIf
Else
Debug ("erreur")
EndIf
Ha ok, donc, ta routine de decompression corrigée m'interesserait alors. Si tu pouvais la retoucher...KarLKoX a écrit :Ton logiciel ne pourra pas décompresser ces données car en compressant comme on le fait, les entêtes de fichiers ne sont pas créées, car gnozal part du principe que nous savons ce que nous faisont avec nos données comme par exemple, le niveau de compression, la taille originale du fichier.
Si tu veux que ce soit compatible avec n'importe quel fichier, il te faudra créer l'entête de fichier du format ZIP et y ajouter ensuite les données compressées.
Pas exactement, non, mais j'essaye de deviner.SPH a écrit :Merci jacobus. Je precise juste que ta routine m'a dit que la compression avait reussi alors que le zip contenait un fichier plus petit que l'original. Et en effet, la decompression ne restitue pas l'original...
En fait, gnozal donne un exemple de compression d'un fichier. Mais moi, c'etait un string en memoire que je voulais zipper PUIS ENSUITE ecrire en fichier. J'espere que tu vois ce que je veux dire...