Saltar al contenido principal
Versión: v20

ZIPArchive

Un archivo ZIP 4D es un objeto File o Folder que contiene uno o más archivos o carpetas, que se comprimen para ser más pequeños que su tamaño original. Estos archivos se crean con una extensión ".zip" y pueden utilizarse para ahorrar espacio en el disco o transferir archivos a través de medios que pueden tener limitaciones de tamaño (por ejemplo, el correo electrónico o la red).

Ejemplo

Para recuperar y ver el contenido de un objeto 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 // guardar la carpeta principal del zip
$zipFile:=$zipFolder.files()[0] //leer la primera carpeta comprimida

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

Resumen

.root : 4D.ZipFolder    una carpeta virtual que permite acceder al contenido del archivo ZIP

ZIP Create archive

Histórico
VersiónModificaciones
v19 R3Adición de las propiedades ZIP Compression LZMA, ZIP Compression xy, .level
v18Añadidos

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

ParámetrosTipoDescripción
fileToZip4D.File->Objeto archivo o carpeta a comprimir
folderToZip4D.Folder->Objeto archivo o carpeta a comprimir
zipStructureObject->Objeto archivo o carpeta a comprimir
destinationFile4D.File->Archivo de destino del archivo
optionsInteger->Opción folderToZip: ZIP Without enclosing folder
ResultObject<-Objeto estado

|

Descripción

El comando ZIP Create archive crea un objeto de archivo ZIP comprimido y devuelve el estado de la operación.

Puede pasar un objeto 4D.File, 4D.Folder, o una estructura zip como primer parámetro:

  • fileToZip: simplemente pase un 4D.File a comprimir.

  • folderToZip: pase un 4D.Folder a comprimir. En este caso, el parámetro options permite comprimir sólo el contenido de la carpeta (es decir, excluir la carpeta padre). Por defecto, ZIP Create archive comprimirá la carpeta y su contenido, de modo que la operación de descompresión volverá a crear una carpeta. Si desea que la operación de descompresión restaure sólo el contenido de la carpeta, pase la constante ZIP Without enclosing folder en el parámetro options.

  • zipStructure: pase un objeto que describa el objeto ZIP archivo. Las siguientes propiedades están disponibles para definir la estructura:

PropiedadTipoDescripción
compressionInteger
  • ZIP Compression standard: Reducir la compresión (por defecto)
  • ZIP Compression LZMA: compresión LZMA
  • ZIP Compression XZ: compresión XZ
  • ZIP Compression none: sin compresión
  • levelIntegerNivel de compresión. Valores posibles: 1 a 10. Un valor más bajo producirá un archivo más grande, mientras que un valor más alto producirá un archivo más pequeño. Sin embargo, el nivel de compresión influye en el rendimiento. Valores por defecto si se omiten:
  • ZIP Compression standard: 6
  • ZIP Compression LZMA: 4
  • ZIP Compression XZ: 4
  • encryptionIntegerLa encriptación a utilizar si se define una contraseña:
  • ZIP Encryption AES128: encriptación AES con una llave de 128 bits.
  • ZIP Encryption AES192: encriptación AES con una llave de 192 bits.
  • ZIP Encryption AES256: encriptación AES con una llave de 256 bits (por defecto si se define la contraseña).
  • ZIP Encryption none: los datos no están encriptados (por defecto si no se define una contraseña)
  • contraseñaTextUna contraseña a utilizar si se requiere encriptación.
    HistóricoCollection
  • una colección de objetos 4D.File o 4D.Folder o
  • una colección de objetos con las siguientes propiedades:
  • PropiedadTipoDescripción
    source4D.File o 4D.FolderFile o Folder
    destinationText(opcional) - Especifica una ruta de archivo relativa para cambiar la organización del contenido del archivo
    optionnumber(opcional) - ZIP Ignore invisible files o 0 para comprimir todo el archivo
    retrollamada4D.FunctionUna fórmula de retrollamada que recibirá la progresión de la compresión (0 - 100) en $1.

    En el parámetro destinationFile, pase un objeto 4D.File describiendo el archivo ZIP a crear (nombre, ubicación, etc.). Se aconseja utilizar la extensión ".zip" si quiere que el archivo ZIP sea procesado automáticamente por cualquier software.

    Una vez creado un archivo, puede utilizar el comando ZIP Read archive para acceder a él.

    Objeto estado

    El objeto status devuelto contiene las siguientes propiedades:

    PropiedadTipoDescripción
    statusTextTextMensaje de error (si lo hay):
  • No se puede abrir el archivo ZIP
  • No se puede crear un archivo ZIP
  • La contraseña es necesaria para la codificación
  • statusIntegerCódigo de estado
    successBooleanTrue si el archivo se ha creado con éxito, si no, false

    Ejemplo 1

    Para comprimir 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)

    Ejemplo 2

    Para comprimir un 4D.Folder sin la carpeta misma:

     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)

    Ejemplo 3

    Para comprimir una estructura de archivo ZIP con una contraseña y una barra de progreso:

     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 //utilizamos el componente 4D Progress

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

    Progress QUIT(progID)

    myFormulaCompressingMethod:

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

    Ejemplo 4

    Quiere pasar una colección de carpetas y archivos para comprimir al objeto 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)

    Ejemplo 5

    Desea utilizar un algoritmo de compresión alternativo con un alto nivel de compresión:

    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 //por defecto es 4

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

    ZIP Read archive

    Histórico
    VersiónModificaciones
    v18Añadidos

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

    ParámetrosTipoDescripción
    zIPFile4D.File->Archivos Zip
    contraseñaText->Contraseña del archivo ZIP, si la hay
    Result4D.ZipArchive<-Objeto archivo

    |

    Descripción

    El comando ZIP Read archive recupera el contenido de zipFile y lo devuelve como un objeto 4D.ZipArchive.

    Este comando no descomprime el archivo ZIP, sólo ofrece una vista de su contenido. Para extraer el contenido de un archivo, es necesario utilizar métodos como file.copyTo() o folder.copyTo().

    Pase un objeto 4D.File haciendo referencia al archivo ZIP comprimido en el parámetro zipFile. El archivo de destino se abrirá hasta que el ZIP Read archive haya terminado de ejecutarse y todos los contenidos/referencias hayan sido extraídos/liberados, entonces se cerrará automáticamente.

    Si el archivo_zip está protegido por contraseña, es necesario utilizar el parámetro opcional password para suministrar una contraseña. Si se requiere una contraseña pero no se pasa al intentar leer el contenido del archivo, se genera un error.

    Objeto archivo

    El objeto 4D.ZipArchive revuelto contiene una sola propiedad, root, cuyo valor es un objeto.4D.ZipFolder. Esta carpeta describe todo el contenido del archivo ZIP.

    Ejemplo

    Para recuperar y ver el contenido de un objeto ZIP file:

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

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

    Para recuperar la lista de los archivos y carpetas del archivo:

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

    Para leer el contenido de un archivo sin extraerlo de la carpeta root:


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

    Para extraer desde la carpeta root:

      //extraer un archivo
    $folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))

    //extraer todos los archivos
    $folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MyDocs"))

    .root

    .root : 4D.ZipFolder

    Descripción

    La propiedad .root contiene una carpeta virtual que permite acceder al contenido del archivo ZIP.

    La carpeta root y su contenido pueden ser manipulados con las funciones y propiedades ZipFile y ZipFolder.

    Esta propiedad es de sólo lectura.