Page 1 sur 4
[RESOLU] progression de AddPackFile
Publié : dim. 22/juin/2014 10:06
par supercdfr
Bonjour,
existe-t-il un moyen de savoir ou en est la compression d'un fichier dans la commande AddPackFile ?
Je compresse des fichiers de + de 3 Go, et il est un peu embêtant de ne pas savoir ou il en est dans la compression du fichier.
j'utilise la compression zip
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 10:58
par Backup
j'ai jamais utilisé cette lib cependant ...
tu connais la taille du fichier que tu compresses
grace a FileSize(NomFichier$)
tu peux connaitre la taille du fichier dans l'archive (tu dois verifier régulièrement l'emploi d'un timer est conseillé )
Resultat = PackEntrySize(#Archive,#PB_Packer_UncompressedSize)
donc tu disposes potentiellement de la différence de taille.... plus qu'a utiliser un
ProgressBarGadget(#Gadget, x, y, Largeur, Hauteur, Minimum, Maximum [, Options])
avec comme Maximum la taille du Fichier que tu compresse
comme Minimum =0
puis dans ton timer avec la vérification proposé plus haut
SetGadgetState(#Gadget, Etat)
etat etant le resultat de PackEntrySize() .... ça devrai le faire
en clair, chaque fois que ton timer se déclenche, tu vérifies la taille du fichier intégré dans ton archive grace a "Resultat = PackEntrySize(#Archive,#PB_Packer_UncompressedSize)"
que tu compares a la taille connu du fichier avant compression ... et tu met le progress bar a jour

Re: progression de AddPackFile
Publié : dim. 22/juin/2014 11:38
par supercdfr
ca pourrais marcher, SAUF QUE je peut pas savoir la taille compresser avant (ce qui est normal).
A la rigueur, cela pourrait marcher si je savais ou il en est dans le fichier non compressé.
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 12:06
par Backup
je recommence au ralenti
Resultat = PackEntrySize(#Archive,#PB_Packer_UncompressedSize)
ce parametre te permet de savoir combien de kilo fait ton fichier dans ton archive, s'il n'etait pas compressé !
cette fonction lit le fichier DANS l'ARCHIVE FORCEMENT ! en dehors on s'en fout c'est avec FileSize()
si tu veux connaitre sa taille compressé , mais ça ne te sert a rien ici ce serai :
Resultat = PackEntrySize(#Archive,#PB_Packer_CompressedSize) ; #PB_Packer_CompressedSize : Renvoie la taille compressée de l'entrée courante.
l'entré courante c'est le fichier que tu es en train de compresser ; (ou que tu as compressé) ... celui qui se trouve donc DANS l'archive ....en entier (ou pas )
si grace a " PackEntrySize(#Archive,#PB_Packer_UncompressedSize)" ; tu connais la taille en cours de package , que ce fichier fait en décompressé (dans l'archive ) .. donc en cours d'ecriture grace au Timer ...
, alors tu peux la comparer avec la taille du fichier (avant compression ) a l'exterieur de l'archive
d'apres la Doc, je comprends que la fonction
Resultat = PackEntrySize(#Archive,
#PB_Packer_UncompressedSize
renvoi la taille du fichier qui est present dans l'archive , donc compréssé ... mais cette taille est renvoyé comme si le fichier n'avait pas été compressé !
ça peut servir par exemple a vérifier si on a la place sur le disque pour décompresser l'archive .....
comme ton fichier est en cours de compression , je suppose (a Vérifier ), que tu peux vérifier la taille dans l'archive pendant son écriture grace a un timer ou un Thread
sinon , je ne vois pas a quoi serviraient ces 2 paramétres ......
ps: ici , il utilise un Callback a la place d'un timer .... mais le principe est le meme
http://forums.purebasic.com/english/vie ... b02ddbd329
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 14:26
par falsam
Dobro a écrit :ps: ici , il utilise un Callback a la place d'un timer
Ce callback fait référence à la fonction PackerCallback() qui n'existe plus dans les dernières versions de Pure Basic.
Ce que tu expliques ne peut pas fonctionner durant la phase de compression des données car durant cette phase, le fichier compressé n'existe pas.
Dobro a écrit :je recommence au ralenti
Même au ralenti ça ne fonnctionna pas

Re: progression de AddPackFile
Publié : dim. 22/juin/2014 14:39
par falsam
supercdfr a écrit :Je compresse des fichiers de + de 3 Go
3 Go pour l'ensemble des fichiers ou 3 Go pour un seul fichier ?
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 14:42
par supercdfr
ça peut être 3go 1 fichier, voir plusieurs fichiers de 3 go dans le même pack
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 14:49
par falsam
supercdfr a écrit :ça peut être 3go 1 fichier, voir plusieurs fichiers de 3 go dans le même pack
Je voulais te proposer d'utiliser AddPackMemory() qui me semble plus rapide que AddPackFile() mais là ..... il n'en est plus question.
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 14:57
par supercdfr
je crains que seuls les auteurs de PB puissent rajouter cette fonction.

Re: progression de AddPackFile
Publié : dim. 22/juin/2014 19:52
par supercdfr
par contre, j'ai l’impression qu'il y a un bug.
Impossible de rajouter des fichiers de 4 GO et +. et la doc ne parle pas d'une limite.
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 19:58
par Backup
falsam a écrit :Ce que tu expliques ne peut pas fonctionner durant la phase de compression des données car durant cette phase, le fichier compressé n'existe pas.
Dobro a écrit :je recommence au ralenti
Même au ralenti ça ne fonnctionna pas

bien sur que si ! durant la compression ton fichier s'ecrit bien ...
on est pas dans un openfile qui attends le Close pour ecrire le fichier .... du moins il me semble j'ai pas testé cette lib
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 20:26
par Backup
je voulais faire un exemple , mais chez moi en 5.22
la fonction
File$=OpenFileRequester("load file to compress","c:\","*.*",#PB_Requester_MultiSelection )
ne marche pas ! pas de multiselection possible !
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 21:04
par Ar-S
Dobro tu mets ton flag en "Pattern position"
Manque le
,0
Code : Tout sélectionner
File$=OpenFileRequester("load file to compress","c:\","*.*",0,#PB_Requester_MultiSelection )
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 22:44
par falsam
Dobro a écrit :je voulais faire un exemple
Un bout de code avec la fonction AddPackFile(). Tu verras que le fichier final apparaît uniquement en fin de traitement.
Comme tu es observateur tu vas vite t'apercevoir qu'il y a d'abord création d'un fichier provisoire qui porte le même nom que le fichier final suivi d'une extension aléatoire.
Exemple si ton fichier final se nomme "test.zip", alors tu auras un fichier"test.zip.a05280" puis à la fin du traitement, tu auras ton fichier final "test.zip".
Code : Tout sélectionner
EnableExplicit
Enumeration
#File
#FilePack
EndEnumeration
Global FileName.s, FilePackName.s = "FilePack.zip", Length
FileName = OpenFileRequester("Select files", "*.*", "*.*", 0, #PB_Requester_MultiSelection)
If FileName <> ""
UseZipPacker()
If CreatePack(#FilePack, FilePackName)
While FileName
If ReadFile(#File, Filename)
Length = Lof(#File)
Debug "Fichier " + GetFilePart(FileName) + " - " + Str(Length)+" bytes lus"
AddPackFile(#FilePack, FileName, GetFilePart(FileName))
CloseFile(#File)
EndIf
Filename = NextSelectedFileName()
Wend
ClosePack(#FilePack)
Else
Debug "Erreur lors de la création du fichier compressé"
EndIf
Else
Debug "Aucun fichier sélectionné"
EndIf
Re: progression de AddPackFile
Publié : dim. 22/juin/2014 23:13
par Backup
...