Page 2 sur 2

Publié : sam. 04/nov./2006 21:13
par SPH
@gnozal:

J'ai essayé "PureZip_test_3" et je t'assure qu'il y a un bug. J'ai compressé 2 jpg avec la routine de compression. Puis j'ai décompressé le zip créé avec ta routine de décompression : resultat, l'un des 2 jpg a été grignoté sur quelque %age !

Publié : dim. 05/nov./2006 14:43
par gnozal
SPH a écrit :@gnozal:

J'ai essayé "PureZip_test_3" et je t'assure qu'il y a un bug. J'ai compressé 2 jpg avec la routine de compression. Puis j'ai décompressé le zip créé avec ta routine de décompression : resultat, l'un des 2 jpg a été grignoté sur quelque %age !
1) Sans exemple de code, je ne peux rien faire. Merci de poster un exemple simple et complet de code qui ne fonctionne pas.
2) Il n'y a pas de corruption de fichiers avec PureZIP à ma connaissance. Les quelques erreurs signalées par les utilisateurs étaient dues à un bug de PB. En cas de problèmes, il faut utiliser les dernières beta librairies de PB4.00 à cause du bug ReadData()/Eof() et la dernière version de PureZIP. Je n'ai pas testé PB4.01!

Références :
- http://www.purebasic.fr/english/viewtop ... c&start=44
- http://www.purebasic.fr/english/viewtop ... highlight=
- http://www.purebasic-lounge.de/viewtopic.php?t=3530
- http://purebasic.forum-gratuit.com/view ... ht=purezip

Publié : dim. 05/nov./2006 15:14
par SPH
Voici ton code :

Code : Tout sélectionner

; -=====================================================================================-
;                                  PureZIP test file 3
; -=====================================================================================-
;
Procedure PureZIP_CallbackForTest(file.s, PerCent.f)
  Debug StrF(PerCent, 2) + "%"
EndProcedure
;
myFileinfo.PureZIP_FileInfo
PureZIP_SetProgressionCallback(@PureZIP_CallbackForTest())
;
; ---------------------------------------------------------------
;
racine$="c:\test\"

MyZIP.s = racine$+"PB_zip.zip"
MyZIPFile1.s = racine$+"01.jpg"
MyZIPFile2.s = racine$+"02.jpg"
MyZIPOutPut.s = racine$+"\PB_unzip\"

; Create & Compress
If PureZIP_Archive_Create(MyZIP, #APPEND_STATUS_CREATE)
  Debug "--- Compress"
  Debug PureZIP_Archive_Compress(MyZIPFile1, #False)
  Debug PureZIP_Archive_Compress(MyZIPFile2, #False)
  PureZIP_Archive_Close()
EndIf
; Read & get info
If PureZIP_Archive_Read(MyZIP)
  Debug "--- Info"
  ReturnValue.l = PureZIP_Archive_FindFirst() = #UNZ_OK
  While ReturnValue = #UNZ_OK 
    Debug PureZIP_Archive_FileInfo(@myFileinfo)
    Debug "Filename: " + myFileinfo\FileName
    Debug "Compressed Size: " + Str(myFileinfo\CompressedSize)
    Debug "Uncompressed Size: "+ Str(myFileinfo\unCompressedSize)
    ReturnValue.l = PureZIP_Archive_FindNext()
  Wend
  PureZIP_Archive_Close()
EndIf
; Read & Extract
If PureZIP_Archive_Read(MyZIP)
  ; Extract files
  Debug "--- Extraction"
  ReturnValue.l = PureZIP_Archive_FindFirst() = #UNZ_OK
  While ReturnValue = #UNZ_OK 
    Debug PureZIP_Archive_Extract(MyZIPOutPut, #True)
    ReturnValue.l = PureZIP_Archive_FindNext()
  Wend
  ; Locate
  Debug "--- Locate"
  If PureZIP_Archive_Locate(GetFilePart(MyZIPFile1)) = #UNZ_OK
    Debug PureZIP_Archive_FileInfo(@myFileinfo)
    Debug "Filename: " + myFileinfo\FileName
    Debug "Compressed Size: " + Str(myFileinfo\CompressedSize)
    Debug "Uncompressed Size: "+ Str(myFileinfo\unCompressedSize)
    PureZIP_Archive_Close()
  EndIf
EndIf
Et mes 2 jpg (que tu devras dezipper) ->jpg.zip
Image

Ta routine compresse donc mes 2 JPG puis les decompresse : le résultat est désastreux...

Publié : dim. 05/nov./2006 15:32
par gnozal
J'ai testé ton code, avec tes images : aucun problème.
Répertoire de C:\test

. <REP> 05/11/06 15:20 .
.. <REP> 05/11/06 15:20 ..
01 JPG 397 747 27/10/06 7:26 01.jpg
02 JPG 250 408 27/10/06 7:26 02.jpg
PB_ZIP ZIP 625 335 05/11/06 15:23 PB_zip.zip
PB_UNZIP <REP> 05/11/06 15:23 PB_unzip
3 fichier(s) 1 273 490 octets

Répertoire de C:\test\PB_unzip

. <REP> 05/11/06 15:23 .
.. <REP> 05/11/06 15:23 ..
01 JPG 397 747 27/10/06 7:26 01.jpg
02 JPG 250 408 27/10/06 7:26 02.jpg
2 fichier(s) 648 155 octets

Nombre total de fichiers listés :
5 fichier(s) 1 921 645 octets
5 répertoire(s) 28 629.50 Mo libre
Le ZIP créé est valide (testé avec 7-ZIP).
J'ai même effectué une comparaison binaire : les fichiers sont identiques.
C:\test\PB_unzip>fc /b 01.jpg ..\01.jpg
Comparaison des fichiers 01.jpg et ..\01.jpg
FC: Aucune différence rencontrée

C:\test\PB_unzip>fc /b 02.jpg ..\02.jpg
Comparaison des fichiers 02.jpg et ..\02.jpg
FC: Aucune différence rencontrée
Donc voir mon point 2 du post ci-dessus.

Publié : dim. 05/nov./2006 15:42
par SPH
Voici les jpg que j'obtiens ->PB_unzip.zip
Image

Matte les et de visu, tu comprendras qu'il y a un bug quelque part !

EDIT :
--- Compress
0
0
--- Info
0
Filename: 01.jpg
Compressed Size: 364254
Uncompressed Size: 385459
0
Filename: 02.jpg
Compressed Size: 240491
Uncompressed Size: 242216
--- Extraction
0
0
--- Locate
0
Filename: 01.jpg
Compressed Size: 364254
Uncompressed Size: 385459

Publié : dim. 05/nov./2006 18:49
par gnozal
SPH a écrit :Voici les jpg que j'obtiens ->PB_unzip.zip
Image
Matte les et de visu, tu comprendras qu'il y a un bug quelque part !
Pas la peine de les "matter", le code fonctionne avec tes images sur 2 PC différents.
C'est bien possible "qu'il y a un bug quelque part", mais apparemment pas dans PureZIP.
Quelle version de PB utilises-tu ?
Utilises-tu les dernières versions des librairies PB ?

Publié : dim. 05/nov./2006 18:50
par Jacobus
il faut utiliser les dernières beta librairies de PB4.00
Comme te l'as dit Gnozal, télécharge les beta libs de PB4, installes les et ça devrait fonctionner. J'ai eu le même problème avec des bmp il y a quelques temps. Tu peux aussi mettre à jour vers PB4.01, cela fonctionne aussi.

@Gnozal
J'ai constaté une incompatibilité de PureZip dans un code utilisant UsePNGImageDecoder() je reçois le message d'erreur suivant en retour.
POLINK:error:Symbol'_inflate_copyright' is multiply defined ('PureZIP_LIb_1.inftrees.obj' and 'ImagePluginPNG:inftrees.obj').

Publié : dim. 05/nov./2006 18:55
par gnozal
Jacobus a écrit :@Gnozal
J'ai constaté une incompatibilité de PureZip dans un code utilisant UsePNGImageDecoder() je reçois le message d'erreur suivant en retour.
POLINK:error:Symbol'_inflate_copyright' is multiply defined ('PureZIP_LIb_1.inftrees.obj' and 'ImagePluginPNG:inftrees.obj').
Oui, ce problème est connu (déjà évoqué sur le forum anglais). PureZIP et ImagePluginPNG() utilisent la librairie statique ZLIB, d'où ces erreurs d'édition de liens (_inflate_copyright() est une fonction de ZLIB). Il faudrait probablement ajouter un paramètre à POLINK, mais je ne sais pas lequel (et Fred/Fr34k n'ont pas répondu à ce sujet).

Publié : dim. 05/nov./2006 19:00
par Jacobus
Ok, merci pour la précision.

Publié : dim. 05/nov./2006 19:21
par Dr. Dri
Le plus simple serait d'avoir "zlib.lib" dans le dossier compilers ou dans purelibraries, ou encore mieux une lib native zlib

Dri

Publié : lun. 06/nov./2006 21:50
par SPH
Avec l'update 4.01, ca fonctionne (mais en PB4, je persiste : cela ne fonctionnait pas)
Bref...

Publié : mar. 07/nov./2006 9:25
par gnozal
SPH a écrit :Avec l'update 4.01, ca fonctionne (mais en PB4, je persiste : cela ne fonctionnait pas)
Bref...
Voir le point 2) de mon premier post :roll: