Page 1 sur 1
Créer un pack de dossier et sous-dossiers ??
Publié : mer. 13/sept./2006 11:28
par Jacobus
Hello, est-ce que quelqu'un connaît le moyen de créer un pack à partir d'un dossier. C'est à dire que je voudrais créer une archive compressée d'un dossier et ses sous-dossiers (donc avec), afin de conserver l'arborescence initiale, et pas compresser 'que' les fichiers du dossier.
Après recherches infructueuses, je n'ai pas trouver de lib ou de code faisant ce type d'action, je me demande si vous auriez ça en magasin ou encore une piste à suivre.
Merci, @+
Publié : mer. 13/sept./2006 13:17
par lionel_om
Ya un topic de 2005 là dessus (PB 3.9x donc), donc je sais pas si ca sera vraiment utile, mais ya 2 Lib pour la copression apparement :
http://purebasic.forum-gratuit.com/view ... light=zlib
Lio
Publié : mer. 13/sept./2006 13:58
par Jacobus
je te remercie mais j'ai déjà vu et ce n'est pas ce que je cherche.
Enfin, je pense avoir trouvé quelque chose qu'il faut que je modifie pour l'adapter à mes besoins, si ça marche je poste un exemple. Sinon, si vous avez des idées...
@+
Publié : mer. 13/sept./2006 18:21
par Droopy
La lib Pure_Zip fait ça.
Voici une copie de l'exemple fourni qui permet de compresser un dossier et ses sous-dossiers dans un zip.
Code : Tout sélectionner
; -=====================================================================================-
; Quick & dirty Mini Console ZIP
; -=====================================================================================-
;
Procedure PureZIP_CallbackForTest(file.s, PerCent.f)
Static FirstTime.l
If FirstTime = 0
Print("Packing ")
FirstTime = 1
EndIf
Print(".")
EndProcedure
;
myFileinfo.PureZIP_FileInfo
PureZIP_SetCallback(@PureZIP_CallbackForTest())
;
OpenConsole()
MyZIP.s = ProgramParameter()
If MyZIP
MyFilesToZIP.s = ProgramParameter()
If MyFilesToZIP
If GetPathPart(MyFilesToZIP) = ""
CurrentPath.s = Space(#MAX_PATH)
GetCurrentDirectory_(#MAX_PATH, @CurrentPath)
MyFilesToZIP = CurrentPath + "\" + MyFilesToZIP
EndIf
ArgOk.l = #True
Option.s = ProgramParameter()
If Option
If LCase(Option) = "/r"
MyOption.l = #PureZIP_Recursive
Else
ArgOk = #False
PrintN("ERROR : unknown option")
PrintN("")
EndIf
EndIf
Else
PrintN("ERROR : no file specified")
PrintN("")
EndIf
Else
PrintN("ERROR : no archive specified")
PrintN("")
EndIf
;
If ArgOk
PackedFiles.l = PureZIP_AddFiles(MyZIP, MyFilesToZIP, #PureZIP_StorePathRelative, MyOption)
PrintN("")
If PackedFiles
PrintN(Str(PackedFiles) + " files packed in archive " + MyZIP)
Else
PrintN("No files found !")
EndIf
Else
PrintN("MiniZIP console PureZIP test file")
PrintN("")
PrintN("Syntax : MiniZIP Archive FileName [Option]")
PrintN("")
PrintN("Option : /r (recursive)")
PrintN("")
PrintN("Example : MiniZIP Test.zip *.*")
EndIf
CloseConsole()
; -=====================================================================================-
Publié : mer. 13/sept./2006 19:46
par Jacobus
Bah, chez moi la lib Pure_Zip ne donne pas de bons résultats. pour ce qui est des fichiers textes, ok, par contre pour les images, zéro.
Publié : mer. 13/sept./2006 21:32
par Droopy
Jacobus a écrit :Bah, chez moi la lib Pure_Zip ne donne pas de bons résultats. pour ce qui est des fichiers textes, ok, par contre pour les images, zéro.
J'ai compressé un dossier avec des images png et gif, et n'ai aucun soucis à les visualiser après extraction.
Qu'entends tu par 'ne donne pas de bon résultats' ?
Publié : mer. 13/sept./2006 22:04
par Jacobus
si je compresse un dossier contenant une trentaine de bmp de tailles variables, à la décompression j'obtiens 2 ou 3 images bmp illisibles et d'autres reformés en puzzle, généralement le bas de l'image découpé en 3 ou 4 morceaux recollés dans le désordre. Ce qui me donne un résultat plus qu'approximatif. Sinon c'est sûr la compression des sous-dossiers est réalisable, mais dans les mêmes conditions (et encore avec les chemins relatifs, car si tu prends l'option des chemins absolus, c'est la cata) dommage
l'utilisation la plus simple de cette lib que j'ai trouvé:
Code : Tout sélectionner
Procedure PACKAGE()
REP$ = GetCurrentDirectory()
MyZIP.s = REP$+"Package.zip"
MyFilesToZIP.s = REP$+"TRANSFERT\*.*"
PureZIP_AddFiles(MyZIP, MyFilesToZIP, #PureZIP_StorePathRelative, #PureZIP_Recursive)
EndProcedure
Procedure UNPACKAGE()
REP$ = GetCurrentDirectory()
MyZIP.s = REP$+"Package.zip"
MyZIPOutPut.s = REP$+"Dezippe\"
PureZIP_ExtractFiles(MyZIP, "*.*", MyZIPOutPut, #True)
EndProcedure
ces deux procédures devraient fonctionner simplement...
j'ai constaté le même bug avec l'outil de InfoByt3 PureSFX qui utilise Pure_Zip, donc...
Publié : mer. 13/sept./2006 22:11
par Droopy
Bizarre, surement à un bug de la lib !?
J'ai tenté de reproduire ton soucis avec 25 bmp, sans succès, aucune image n'est corrompue.
Publié : mer. 13/sept./2006 22:17
par Jacobus
Droopy a écrit :Bizarre, surement à un bug de la lib !?
J'ai tenté de reproduire ton soucis avec 25 bmp, sans succès, aucune image n'est corrompue.
Ca me surprend quand même

je ne comprend pas, d'où ma recherche d'un palliatif...
Publié : jeu. 14/sept./2006 8:03
par gnozal
Il n'y a pas de corruption de fichiers avec PureZIP à ma connaissance. En cas de problèmes,
il faut utiliser les dernières beta librairies de PB4 (
www.purebasic.com/beta ) à cause du bug ReadData()/Eof() et la dernière version de PureZIP.
La version PB3.94 n'a jamais posé ce genre de problèmes.
Références :
-
http://www.purebasic.fr/english/viewtop ... c&start=44
-
http://www.purebasic.fr/english/viewtop ... highlight=
S'il subsiste un problème avec les beta librairies, merci de poster le code qui pose problème ici :
http://www.purebasic.fr/english/viewtop ... &start=165
Publié : jeu. 14/sept./2006 9:48
par Jacobus
Suivant tes conseils j'ai installé les dernières beta libs (en transformant les fichiers (*.TXT) téléchargés en Fichier) mais le compilo de pb n'aime pas et plante au lancement. Donc retrait des beta libs et retour des autres. Il y a peut-être une façon de charger ces beta libs autrement pour qu'elles soient prises en compte?
Je ne peux donc te dire si ta lib pose problème après correction, car elle me rendrait effectivement bien service. Les deux procédures de compression et décompression ci-dessus créées d'après ta librairie, sont des plus basiques. Comme je l'ai dit plus haut, les corruptions interviennent quasiment uniquement avec des BMP, les autres formats d'image sont rendus correctement.
Rectificatif :
J'ai changé les libs String et FileSystem par les beta et le compilo accepte. j'ai retesté ta lib avec les procédures dito en compressant un dossiers de plusieurs centaines de bmp.
résultat = les bmp de petites taille sont correctement restitués. les plus grands format (ex:200x300) sont corrompus. c'est le cas de 7 images sur le lot. C'est mieux mais c'est pas encore ça.
Publié : jeu. 14/sept./2006 10:13
par gnozal
Jacobus a écrit :Suivant tes conseils j'ai installé les dernières beta libs (en transformant les fichiers (*.TXT) téléchargés en Fichier) mais le compilo de pb n'aime pas et plante au lancement.
Pas de message d'erreur ?
Tu utilises bien PB 4 ?
Les librairies sont à copier dans \PureBasic\PureLibraries\.
Jacobus a écrit :Je ne peux donc te dire si ta lib pose problème après correction, car elle me rendrait effectivement bien service. Les deux procédures de compression et décompression ci-dessus créées d'après ta librairie, sont des plus basiques.
Je confirme que sous PB4 les beta librairies sont indispensables pour PureZIP (bug PB4).
Publié : jeu. 14/sept./2006 10:44
par Jacobus
Pas de message d'erreur ? ==> non
Tu utilises bien PB 4 ? ==> oui
Les librairies sont à copier dans \PureBasic\PureLibraries\. ==> oui
je vais réessayer en installant les beta libs une à une pour voir laquelle génère le plantage...
Publié : jeu. 14/sept./2006 10:58
par Jacobus
Bon c'est Ok!
J'ai installé toutes les beta libs avec sussès... sauf la Systray, c'est elle qui plante mon compilo.
Pure_Zip fonctionne donc parfaitement avec les autres beta libs et les bmp sont correctement restitués, quelle que soit leur taille.
=> Un grand Merci à Maître Gnozal! cela va vraiment me simplifier la vie dans mes applis...

Publié : jeu. 14/sept./2006 13:34
par gnozal
Jacobus a écrit :=> Un grand Merci à Maître Gnozal! cela va vraiment me simplifier la vie dans mes applis...

