Aller au contenu principal
Version: v20 R4 BETA

ZIPArchive

Une archive ZIP 4D est un objet File ou Folder contenant un ou plusieurs fichiers ou dossiers, qui sont compressés afin d'être plus petits que leur taille d'origine. Ces archives sont créées avec une extension ".zip" et peuvent être utilisées pour économiser de l'espace sur le disque ou transférer des fichiers sur des supports de taille limitée (par exemple, l'email ou le réseau).

Exemple

Pour récupérer et visualiser le contenu d'un objet ZIP file :

var $path; $archive : 4D.File
var $zipFile : 4D.ZipFile
var $zipFolder : 4D.ZipFolder
var $txt : Text

$path:=Folder(fk desktop folder).file("MyDocs/Archive.zip")
$archive:=ZIP Read archive($path)
$zipFolder:=$archive.root // store the zip main folder
$zipFile:=$zipFolder.files()[0] //read the first zipped file

If($zipFile.extension=".txt")
$txt:=$zipFile.getText()
End if

Sommaire

.root : 4D.ZipFolder    un dossier virtuel permettant d'accéder au contenu de l'archive ZIP

ZIP Create archive

Historique
VersionModifications
v19 R3Ajout des propriétés ZIP Compression LZMA, ZIP Compression xy, .level
v18Ajout

ZIP Create archive ( fileToZip : 4D.File ; destinationFile : 4D.File ) : Object
ZIP Create archive ( folderToZip : 4D.Folder ; destinationFile : 4D.File { ; options : Integer }) : Object
ZIP Create archive ( zipStructure : Object ; destinationFile : 4D.File ) : Object

ParamètresTypeDescription
fileToZip4D.File->Objet fichier ou dossier à compresser
folderToZip4D.Folder->Objet fichier ou dossier à compresser
zipStructureObject->Objet fichier ou dossier à compresser
destinationFile4D.File->Fichier de destination de l'archive
optionsInteger->Si folderToZip utilisé : ZIP Without enclosing folder
RésultatObject<-Objet statut

|

Description

La commande ZIP Create archive crée un objet d'archive ZIP compressé et renvoie le statut de l'opération..

Vous pouvez passer un objet 4D.File, 4D.Folder, ou une structure Zip en tant que premier paramètre :

  • fileToZip : passez simplement un 4D.File à compresser.

  • folderToZip : passez un 4D.Folder à compresser. Dans ce cas, le paramètre options vous permet de compresser uniquement le contenu du dossier (c'est-à-dire d'exclure le dossier parent). Par défaut, l'archive ZIP Create archive compressera le dossier et son contenu, de sorte que l'opération de décompression recrée un dossier. Si vous souhaitez que l'opération de décompression ne restaure que le contenu du dossier, passez la constante ZIP Without enclosing folder dans le paramètre options.

  • zipStructure : passez un objet décrivant l'objet ZIP archive. Les propriétés suivantes sont disponibles pour définir la structure :

PropriétéTypeDescription
compressionInteger
  • ZIP Compression standard: Réduire la compression (par défaut)
  • ZIP Compression LZMA: compression LZMA
  • ZIP Compression XZ: compression XZ
  • ZIP Compression none: Pas de compression
  • levelIntegerNiveau de compression. Valeurs possibles : 1 à 10. Une valeur plus faible produira un fichier plus volumineux, tandis qu'une valeur plus élevée produira un fichier plus petit. Le niveau de compression a toutefois un impact sur les performances. Valeur par défaut (si omis) :
  • ZIP Compression standard: 6
  • ZIP Compression LZMA: 4
  • ZIP Compression XZ: 4
  • encryptionIntegerLe chiffrement à utiliser si un mot de passe est défini :
  • ZIP Encryption AES128: chiffrement AES à l'aide d'une clé 128 octets.
  • ZIP Encryption AES192: chiffrement AES à l'aide d'une clé 192 octets.
  • ZIP Encryption AES256: chiffrement AES à l'aide d'une clé 256 octets (par défaut si un mot de passe est défini).
  • ZIP Encryption none: les données ne sont pas chiffrées (par défaut si aucun mot de passe n'est défini)
  • passwordTextUn mot de passe à définir si le chiffrement est requis.
    HistoriqueCollection
  • une collection d'objets 4D.File ou 4D.Folder ou
  • une collection d'objets dont les propriétés sont les suivantes :
  • PropriétéTypeDescription
    source4D.File ou 4D.FolderFile ou Folder
    destinationText(facultatif) - Indiquer un chemin de fichier relatif pour modifier l'organisation du contenu de l'archive
    optionnumber(facultatif) - ZIP Ignore invisible files ou 0 pour compresser tout le fichier
    callback4D.FunctionUne formule de rétro-appel qui recevra la progression de la compression (0 à 100) dans $1.

    Dans le paramètre destinationFile, passez un objet 4D.File décrivant l'archive ZIP à créer (nom, emplacement, etc.). Il est conseillé d'utiliser l'extension ".zip" si vous souhaitez que l'archive ZIP soit traitée automatiquement par un logiciel.

    Une fois que l'archive est créée, vous pouvez utiliser la commande ZIP Read archive pour y accéder.

    Objet statut

    L'objet statut retourné contient les propriétés suivantes :

    PropriétéTypeDescription
    statusTextTextMessage d'erreur (le cas échéant) :
  • Impossible d'ouvrir l'archive ZIP
  • Impossible de créer une archive ZIP
  • Le mot de passe est requis pour le chiffrement
  • statusIntegerCode d'état
    successBooleanVrai si l'archive a été créée avec succès, sinon faux

    Exemple 1

    Pour compresser un 4D.File :

     var $file; $destination : 4D.File
    var $status : Object

    $destination:=Folder(fk desktop folder).file("MyDocs/file.zip")
    $file:=Folder(fk desktop folder).file("MyDocs/text.txt")

    $status:=ZIP Create archive($file;$destination)

    Exemple 2

    Pour compresser un 4D.Folder sans le dossier lui-même :

     var $folder : 4D.Folder
    var $destination : 4D.File
    var $status : Object

    $destination:=Folder(fk desktop folder).file("MyDocs/Images.zip")
    $folder:=Folder(fk desktop folder).folder("MyDocs/Images")

    $status:=ZIP Create archive($folder;$destination;ZIP Without enclosing folder)

    Exemple 3

    Pour compresser une structure d'archive ZIP avec un mot de passe et une barre de progression :

     var $destination : 4D.File
    var $zip;$status : Object
    var progID : Integer

    $destination:=Folder(fk desktop folder).file("MyDocs/Archive.zip")

    $zip:=New object
    $zip.files:=Folder(fk desktop folder).folder("MyDocs/Resources").folders()
    $zip.password:="password"
    $zip.callback:=Formula(myFormulaCompressingMethod($1))

    progID:=Progress New //nous utilisons le composant 4D Progress

    $status:=ZIP Create archive($zip;$destination)

    Progress QUIT(progID)

    myFormulaCompressingMethod:

     var $1 : Integer
    Progress SET PROGRESS(progID;Num($1/100))

    Exemple 4

    Vous souhaitez passer une collection de dossiers et de fichiers à compresser à l'objet zipStructure :

     var $destination : 4D.File
    var $zip;$err : Object
    $zip:=New object
    $zip.files:=New collection
    $zip.files.push(New object("source";Folder(fk desktop folder).file("Tests/text.txt")))
    $zip.files.push(New object("source";Folder(fk desktop folder).file("Tests/text2.txt")))
    $zip.files.push(New object("source";Folder(fk desktop folder).file("Images/image.png")))

    $destination:=Folder(fk desktop folder).file("file.zip")
    $err:=ZIP Create archive($zip;$destination)

    Exemple 5

    Vous souhaitez utiliser un autre algorithme de compression à un niveau de compression élevé :

    var $destination : 4D.File
    var $zip; $err : Object

    $zip:=New object
    $zip.files:=New collection
    $zip.files.push(Folder(fk desktop folder).folder("images"))
    $zip.compression:=ZIP Compression LZMA
    $zip.level:=7 //4 par défaut

    $destination:=Folder(fk desktop folder).file("images.zip")
    $err:=ZIP Create archive($zip; $destination)

    ZIP Read archive

    Historique
    VersionModifications
    v18Ajout

    ZIP Read archive ( zipFile : 4D.File { ; password : Text }) : 4D.ZipArchive

    ParamètresTypeDescription
    zipFile4D.File->Fichier archive ZIP
    passwordText->Mot de passe de l'archive ZIP, le cas échéant
    Résultat4D.ZipArchive<-Objet archive

    |

    Description

    La commande ZIP Read archive récupère le contenu de zipFile et le renvoie sous la forme d'un objet 4D.ZipArchive.

    Cette commande ne décompresse pas l'archive ZIP, elle fournit seulement un aperçu de son contenu. Pour extraire le contenu d'une archive, vous devez utiliser des méthodes telles que file.copyTo() ou folder.copyTo().

    Passez un objet 4D.File référençant l'archive ZIP compressée dans le paramètre zipFile. Le fichier d'archive cible est ouvert jusqu'à la fin de l'exécution de la commande ZIP Read archive et jusqu'à ce que tous les contenus/références soient extrait(e)s/publié(e)s ; il est ensuite fermé automatiquement.

    Si le zipFile est protégé par un mot de passe, vous devez utiliser le paramètre password pour fournir un mot de passe. Si un mot de passe est requis mais qu'il n'est pas passé lorsque vous tentez de lire le contenu de l'archive, une erreur est générée.

    Objet archive

    L'objet 4D.ZipArchive retourné contient une seule propriété, root, dont la valeur est un objet 4D.ZipFolder. Ce dossier décrit le contenu de l'archive ZIP.

    Exemple

    Pour récupérer et visualiser le contenu d'un objet ZIP file :

     var $archive : 4D.ZipArchive
    var $path : 4D.File

    $path:=Folder(fk desktop folder).file("MyDocs/Archive.zip")
    $archive:=ZIP Read archive($path)

    Pour récupérer la liste des fichiers et dossiers de l'archive :

     $folders:=$archive.root.folders()
    $files:=$archive.root.files()

    Pour lire le contenu d'un fichier sans l'extraire du dossier root :


    If($files[$i].extension=".txt")
    $txt:=$files[$i].getText()
    Else
    $blob:=$files[$i].getContent()
    End if

    Pour extraire à partir du dossier root :

      //extract a file
    $folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))

    //extract all files
    $folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MyDocs"))

    .root

    .root : 4D.ZipFolder

    Description

    La propriété .root contient un dossier virtuel permettant d'accéder au contenu de l'archive ZIP.

    Le dossier root et son contenu sont manipulés à l'aide des fonctions et propriétés des classes ZipFile et ZipFolder.

    Cette propriété est en lecture seule.