Décompresser un fichier zip

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Décompresser un fichier zip

Message par falsam »

Bonjour, dans la section Informations et tutoriaux, j'explique le principe de lecture d'un fichier compressé. Par contre je n'ai pas poster de code traitant de la manière de décompresser un fichier. je préfère vous le soumettre.

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
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Décompresser un fichier zip

Message par falsam »

@Fred et les autres : La décompression d'un fichier contenant un dossier dont le nom contient une apostrophe ne fonctionne pas si j'utilise

Code : Tout sélectionner

UncompressPackFile(#ZipFile, PackEntryName$, PackEntryName$)
au lieu de

Code : Tout sélectionner

 UncompressPackFile(#ZipFile, PackEntryName$)
Lors de la décompression, le dossier est bien crée mais pas le contenu du dossier.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre