Antes de intercambiar archivos (por correo electrónico, por ejemplo), a menudo los comprimimos para reducir su tamaño antes de transmitirlos. Con 4D v18, puede comprimir y descomprimir sus archivos mediante programación sin necesidad de librerías o herramientas externas. Aquí están los nuevos comandos que le permiten hacerlo:
Comprimir archivos y carpetas
El nuevo Zip Create archive permite crear un archivo zip pasando un fichero, una carpeta o un objeto con parámetros(por ejemplo, una contraseña para leer el archivo).
Comprimir un archivo:
C_OBJECT($file;$destination)
:=
$destination :=Folder(fk desktop folder).file("MisDocs/archivo.zip")
$fileFolder(fk desktop folder
).file("MisDocs/texto.txt")
(
ZIP Create archive$file;$destination
)
Comprime una carpeta:
C_OBJECT($folder;$destination)
$destination :=Folder(fk desktop folder).file("MisDocs/Imágenes.zip")
$folder :=Folder(fk desktop folder).folder("MisDocs/Imágenes")
ZIP Create archive (
$folder;$destination
)
Comprimir con una contraseña y una barra de progreso:
C_OBJECT($zip)
$destination :=Folder(fk desktop folder).file("MisDocs/Archivo.zip")
$zip :=New object
$zip .files:=Folder(fk desktop folder).folder("MisDocs/Recursos").folders()
$zip .password:="contraseña"
$zip .callback:=Formula(FormulaCompressing ($1))
progID :=Progress New
ZIP Create archive (
$zip;$destination)
Progress QUIT (progID)
El método FormulaCompressing:
Progress SET PROGRESS (progID;Num($1/100))
Descomprimir archivos y carpetas
El nuevo ZIP Read archive devuelve un objeto de archivo. Manipulando este objeto, se puede obtener fácilmente la lista de ficheros dentro del archivo, extraer un fichero concreto, o extraer todo el archivo, etc.
Leer el contenido del archivo
C_OBJECT($archive;$path)
$path :=Folder(fk desktop folder).file("MisDocumentos/Archivo.zip")
$archive :=ZIP Read archive($path
)
Recuperar la lista de archivos y carpetas
$folders:=$archive.root.folders()
$files :=$archive.root.files()
Leer el contenido de un archivo sin extraerlo
If ($files[$i].extension=".txt")
$txt :=$files[$i].getText()
Else
$blob :=$files[$i].getContent()
End if
Extraer el fichero del archivo
$folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))
Extraer todos los archivos
$folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MisOctos"))