Page 1 sur 1

Décompresser un fichier zip

Publié : mar. 15/janv./2013 14:06
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

Re: Décompresser un fichier zip

Publié : mar. 15/janv./2013 14:55
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.