Afin de ne pas alourdir le code je ne traite pas du choix de la destination de la décompression.
Il est donc important de l'enregistrer dans un dossier afin de contrôler le résultat de la décompression.
Merci pour d'avance pour vos commentaires
Code : Tout sélectionner
; Décompression d'un fichier zip
;
Enumeration
#ZipFile
EndEnumeration
UseZipPacker()
ZipFile$ = OpenFileRequester("Ouvrir un fichier ...","", "Fichiers compressés|*.zip", 0)
If ZipFile$ <> ""
;Ne gérant pas la destination de la décompression on va créer un dossier de destination
;Ce dossier sera un sous dossier du dossier courrant de l'application
;Il portera le nom du fichier en cours de décompression
;Mémorisation du dossier à créer et sur lequel on se positionnera pour la décompression
Directory$ = Mid(GetFilePart(ZipFile$), 1, Len(GetFilePart(ZipFile$))-Len(GetExtensionPart(ZipFile$))-1)
;Création du dossier de destination de la décompression
CreateDirectory(Directory$)
;Mémorisation du dossier de destination de la décompression
CurrentDirectory$ = GetCurrentDirectory() + Directory$ + "\"
OpenPack(#ZipFile, ZipFile$, #PB_Packer_Zip)
;Lecture séquentielle des entrées du fichier compressé
If ExaminePack(#ZipFile)
While NextPackEntry(#ZipFile)
PackEntryName$ = PackEntryName(#ZipFile)
Select PackEntryType(#ZipFile)
Case #PB_Packer_File
SetCurrentDirectory(CurrentDirectory$)
;Création du/des dossiers si inexistant
For i=1 To CountString(PackEntryName$, "/")
Directory$ = StringField(PackEntryName$, i, "/")
CreateDirectory(Directory$)
SetCurrentDirectory(CurrentDirectory$ + Directory$)
Next
SetCurrentDirectory(CurrentDirectory$)
UncompressPackFile(#ZipFile, PackEntryName$)
Case #PB_Packer_Directory ;C'est un dossier contenant des sous dossiers
SetCurrentDirectory(CurrentDirectory$)
;Création du/des dossiers si inexistant
For i=1 To CountString(PackEntryName$, "/")
Directory$ = StringField(PackEntryName$, i, "/")
CreateDirectory(Directory$)
SetCurrentDirectory(CurrentDirectory$ + Directory$)
Next
EndSelect
Wend
EndIf
EndIf