Bonsoir,
J'ai résolu le souci avec 7z car il refusait d'ouvrir certaines de mes archives. En fait lui aussi a besoin que les noms des fichiers archives aient un format spécial.
Si vous avez un fichier compressé au nom de
"archive compressée hier.zip", le fichier ne sera
pas trouvé par 7z;
par contre si vous le nommez
"archive_compressée_hier.zip" 7zip va le trouver et le décompresser correctement.
Pourquoi ? Parce qu'il ne faut
pas d'espace libre entre les caractères du nom. On pourrait donc aussi écrire:
"archivecompresséehier.zip"
Ce qui peut se comprendre en regardant simplement les arguments/paramètres qui doivent être passés à la commande,
les "espaces" ont une importance.
Après tous ces tests, j'adopte clairement l'intégration de 7zip dans les applications faites avec PB. Ça devient un vrai bonheur de compresser/décompresser des fichiers et des dossiers.
Voici donc une deuxième astuce dans l'astuce en sujet.
Je reprends l'exemple donné plus haut avec un
ExplorerListGadget()
Impératif : 7zip
doit être installé sur votre PC
Code : Tout sélectionner
;DECOMPRESSER DES ZIP (OU AUTRES) avec 7Z qui affiche une fenêtre de travail avec barre de progression et des options.
Procedure UnzipArchive_7z(Explorer.l)
Position = GetGadgetState(Explorer)
If Position >= 0
Resultat = GetGadgetItemState(Explorer, Position)
If Resultat & #PB_Explorer_Selected
ZipFile$ = GetGadgetItemText(Explorer, Position) ; renvoi le nom de l'archive sélectionnée
ZipDirectory$ = GetGadgetText(Explorer) ; renvoi le nom du répertoire actuellement ouvert dans l'explorateur
SetCurrentDirectory(ZipDirectory$) ; important pour indiquer à 7z où il doit travailler/chercher l'archive
; 2 possibilités :
; La première, en utilisant la fonction RunProgram() de PB
RunProgram("C:\Program Files\7-Zip\7zG.exe"," e "+ZipFile$+" -o*", ZipDirectory$) ; tous les fichiers sont extraits dans un dossier portant le nom de l'archive SANS les sous répertoires
; La seconde en utilisant la commande ShellExecute_()
; ShellExecute_(0,"open","C:\Program Files\7-Zip\7zG.exe"," x "+ZipFile$+" -o*",ZipDirectory$,1) ; tous les fichiers sont extraits dans un dossier portant le nom de l'archive et incluant les sous répertoires
EndIf
EndIf
EndProcedure
Explication sur les arguments passés:
-
Attention! les espaces ont leur importance (voir la doc de 7z pour choisir la commande à utiliser)
Dans ce paramètre : " e "+ZipFile$+" -o*"
" e " = pour extraire les fichiers de l'archive sans les sous répertoires. Seuls les fichiers sont décompressés.
+ZipFile$+ = ajout du nom de l'archive SANS son chemin complet.
" -o" = le " -" et le "o", indiquent le "OutputDir" (ou dossier de sortie) dans lequel seront décompressés les fichiers.
"*" = indique à 7z qu'il doit créer un dossier au nom de l'archive où seront décompressés les fichiers. C'est le plus simple pour s'y retrouver. l'étoile "*" doit toucher le "o" -> o*
Si vous souhaitez que la décompression intègre les sous-répertoires, remplacez le "
e " par un "
x ", votre Structure de dossier sera sauvegardée.
Le paramètre : ZipDirectory$
indique à 7z le répertoire courant où se trouve l'archive à décompresser, c'est là qu'il va aller la chercher. Ce qui revient pour lui à écrire le chemin complet de l'archive ou plus exactement que l'archive "ZipFile$" se trouve dans le répertoire "ZipDirectory$";
soit pour l'exemple : GetGadgetText(Explorer)+GetGadgetItemText(Explorer, Position)
Je vous laisse chercher comment faire pour compresser, mais un indice, c'est aussi simple.
Merci Marc56 de t'être penché sur le sujet pour m'apporter tes lumières.
Quand tous les glands seront tombés, les feuilles dispersées, la vigueur retombée... Dans la morne solitude, ancré au coeur de ses racines, c'est de sa force maturité qu'il renaîtra en pleine magnificence...Jacobus.