Avant d’échanger des fichiers (par email par exemple), nous les compressons souvent pour réduire leur taille avant de les transmettre. Avec 4D v18, vous pouvez compresser et décompresser vos fichiers par programmation sans avoir besoin de bibliothèques ou d’outils externes. Voici les nouvelles commandes qui vous permettent de le faire :
Compresser les fichiers et les dossiers
La nouvelle commande Zip Create archive vous permet de créer une archive zip en passant soit un fichier, soit un dossier, soit un objet avec des paramètres(par exemple, un mot de passe pour lire l’archive).
Compresser un fichier :
C_OBJECT($file;$destination)
$destination :=Folder(fk desktop folder).file("MesDocs/fichier.zip")
$file :=Folder(fk desktop folder).file("MesDocs/text.txt")
ZIP Create archive ($file;$destination)
Compresser un dossier :
C_OBJECT($folder;$destination)
$destination :=Folder(fk desktop folder).file("MesDocs/Images.zip")
$folder :=Folder(fk desktop folder).folder("MesDocs/Images")
ZIP Create archive ($folder;$destination)
Compresser avec un mot de passe et une barre de progression :
C_OBJECT($zip)
$destination :=Folder(fk desktop folder).file("MesDocs/Archive.zip")
$zip :=New object
$zip .files:=Folder(fk desktop folder).folder("MesDocs/Ressources" ).folders()
$zip .password:= "password"
$zip .callback:=Formula(FormulaCompressing ($1))
progID :=Progress New
ZIP Create archive (
$zip;$destination)
Progress QUIT (progID)
La méthode FormulaCompressing:
Progress SET PROGRESS (progID;Num($1/100 ) )
Décompresser des fichiers et des dossiers
Une nouvelle ZIP Read archive renvoie un objet archive. En manipulant cet objet, vous pouvez facilement obtenir la liste des fichiers de l’archive, extraire un fichier particulier, ou extraire l’archive entière, etc.
Lire le contenu de l’archive
C_OBJECT($archive;$path)
$path :=Folder(fk desktop folder).file("MesDocs/Archive.zip")
$archive :=ZIP Read archive($path)
Récupérer la liste des fichiers et des dossiers
$folders:=$archive.root.folders()
$files :=$archive.root.files()
Lire le contenu d’un fichier sans extraction
If ($files[$i].extension= ".txt")
$txt :=$files[$i].getText()
Else
$blob :=$files[$i].getContent()
End if
Extraire le fichier de l’archive
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MesDocs"))
Extraire tous les fichiers
$folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MesDocs"))