Aller au contenu principal
Version: 20 R5 BETA

ZIPArchive

A 4D ZIP archive is a File or Folder object containing one or more files or folders, which are compressed to be smaller than their original size. 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
a virtual folder providing access to the contents of the ZIP archive

ZIP Create archive

Historique
ReleaseModifications
19 R3Added ZIP Compression LZMA, ZIP Compression xy, .level property
18Ajout

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->folderToZip option: ZIP Without enclosing folder
RésultatObject<-Objet statut

Description

The ZIP Create archive command creates a compressed ZIP archive object and returns the status of the operation.

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

  • fileToZip: You simply pass a 4D.File to compress.

  • folderToZip: You pass a 4D.Folder to compress. In this case, the options parameter allows you to compress only the contents of the folder (i.e., exclude the enclosing folder). By default, ZIP Create archive will compress the folder and its contents, so that the decompressing operation will recreate a folder. If you want the decompressing operation to restore only the contents of the folder, pass the ZIP Without enclosing folder constant in the options parameter.

  • zipStructure: You pass an object describing the ZIP archive object. Les propriétés suivantes sont disponibles pour définir la structure :

PropriétéTypeDescription
compressionInteger
  • ZIP Compression standard: Deflate compression (default)
  • ZIP Compression LZMA: LZMA compression
  • ZIP Compression XZ: XZ compression
  • ZIP Compression none: No 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. Default values if omitted:
  • ZIP Compression standard: 6
  • ZIP Compression LZMA: 4
  • ZIP Compression XZ: 4
  • encryptionIntegerThe encryption to use if a password is set:
  • ZIP Encryption AES128: AES encryption using 128-bit key.
  • ZIP Encryption AES192: AES encryption using 192-bit key.
  • ZIP Encryption AES256: AES encryption using 256-bit key (default if password is set).
  • ZIP Encryption none: Data is not encrypted (default if no password is set)
  • passwordTextUn mot de passe à définir si le chiffrement est requis.
    HistoriqueCollection
  • a collection of 4D.File or 4D.Folder objects or
  • a collection of objects with the following properties:
  • PropertyTypeDescription
    source4D.File or 4D.FolderFile or Folder
    destinationText(optional) - Specify a relative filepath to change the organization of the contents of the archive
    optionnumber(optional) - ZIP Ignore invisible files or 0 to compress all of the file
    callback4D.FunctionUne formule de rétro-appel qui recevra la progression de la compression (0 à 100) dans $1.

    In the destinationFile parameter, pass a 4D.File object describing the ZIP archive to create (name, location, etc.). Il est conseillé d'utiliser l'extension ".zip" si vous souhaitez que l'archive ZIP soit traitée automatiquement par un logiciel.

    Once an archive is created, you can use the ZIP Read archive command to access it.

    Status object

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

    PropriétéTypeDescription
    statusTextTextError message (if any):
  • Cannot open ZIP archive
  • Cannot create ZIP archive
  • Password is required for encryption
  • statusIntegerCode d'état
    successBooleanVrai si l'archive a été créée avec succès, sinon faux

    Exemple 1

    To compress a 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

    To compress a 4D.Folder without the folder itself:

     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 //we use the 4D Progress component

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

    Progress QUIT(progID)

    myFormulaCompressingMethod:

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

    Exemple 4

    You want to pass a collection of folders and files to compress to the zipStructure object:

     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
    ReleaseModifications
    18Ajout

    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

    The ZIP Read archive command retrieves the contents of zipFile and returns it as a 4D.ZipArchive object.

    Cette commande ne décompresse pas l'archive ZIP, elle fournit seulement un aperçu de son contenu. To extract the contents of an archive, you need to use methods such as file.copyTo() or folder.copyTo().

    Pass a 4D.File object referencing the compressed ZIP archive in the zipFile parameter. The target archive file will be opened until the ZIP Read archive has finished executing and all contents/references have been extracted/released, then it will be closed automatically.

    If the zipFile is password protected, you need to use the optional password parameter to provide a password. 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.

    Archive object

    The returned 4D.ZipArchive object contains a single root property whose value is a 4D.ZipFolder object. 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

    The .root property contains a virtual folder providing access to the contents of the ZIP archive.

    The root folder and its contents can be manipulated with the ZipFile and ZipFolder functions and properties.

    Cette propriété est en lecture seule.