Prima di scambiare file (ad esempio via e-mail), spesso li comprimiamo per ridurne le dimensioni prima di trasmetterli. Con 4D v18, è possibile comprimere e decomprimere i file tramite la programmazione, senza bisogno di librerie o strumenti esterni. Ecco i nuovi comandi che consentono di farlo:
Comprimere file e cartelle
Il nuovo comando Zip Create archive consente di creare un archivio zip passando un file, una cartella o un oggetto con dei parametri(ad esempio, una password per leggere l’archivio).
Comprimere un file:
C_OBJECT($file;$destination)
$destination :=Folder(fk desktop folder).file("MyDocs/file.zip")
$file :=Folder(fk desktop folder).file("MyDocs/testo.txt")
ZIP Create archive ($file;$destination)
Comprimere una cartella:
C_OBJECT($folder;$destination)
$destination :=Folder(fk desktop folder).file("MyDocs/Images.zip")
$folder :=Folder(fk desktop folder).folder("MyDocs/Images")
ZIP Create archive ($folder;$destination)
Comprimere con una password e una barra di avanzamento:
C_OBJECT($zip)
$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(FormulaCompressing ($1))
progID :=Progress New
ZIP Create archive (
$zip;$destination)
Progress QUIT (progID)
Il metodo FormulaCompressing:
Progress SET PROGRESS (progID;Num($1/100))
Decomprimere file e cartelle
Un nuovo ZIP Read archive restituisce un oggetto archivio. Manipolando questo oggetto, è possibile ottenere facilmente l’elenco dei file all’interno dell’archivio, estrarre un file particolare o l’intero archivio, ecc.
Leggere il contenuto dell’archivio
C_OBJECT($archive;$path)
$path :=Folder(fk desktop folder).file("MyDocs/Archive.zip")
$archive :=ZIP Read archive($path)
Recuperare l’elenco dei file e delle cartelle
$folders:=$archive.root.folders()
$files :=$archive.root.files()
Leggere il contenuto di un file senza estrazione
If ($files[$i].extension=".txt")
$txt :=$files[$i].getText()
Else
$blob :=$files[$i].getContent()
End if
Estrarre il file dall’archivio
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))
Estrarre tutti i file
$folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MyDocs"))