Saltar para o conteúdo principal
Versão: v20 R4 BETA

ZIPArchive

Um arquivo 4D Zip é um objetoFile ou Folder contendo um ou mais arquivos ou pastas, que são comprimidos para ter um tamanho menor que o original. Esses arquivos são criados com uma extensão ".zip" e podem ser usados para poupar espaço em disco ou transferir arquivos via meios que tenham limitações de tamanho (por exemplo, um email ou por uma rede).

Exemplo

Para recuperar e ver os conteúdos de um 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 // store the zip main folder
$zipFile:=$zipFolder.files()[0] //read the first zipped file If($zipFile.extension=".txt")
$txt:=$zipFile.getText()
End if

Resumo

.root : 4D. ZipFolder    uma pasta virtual que permite o acesso ao conteúdo do arquivo ZIP

ZIP Create archive

Histórico
VersãoMudanças
v19 R3Adição das propriedades ZIP Compression LZMA, ZIP Compression xy, .level
v18Adicionado

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âmetroTipoDescrição
fileToZip4D. File->Objeto File ou Folder a comprimir
folderToZip4D. Folder->Objeto File ou Folder a comprimir
zipStructureObject->Objeto File ou Folder a comprimir
destinationFile4D. File->Arquivo destino para o arquivo
optionsInteger->Option folderToZip: ZIP Without enclosing folder
ResultadosObject<-Objeto de estado

|

Descrição

O comando ZIP Create archive cria um objecto de arquivo ZIP comprimido e devolve o estado da operação.

You can pass a 4D. File, a 4D. Folder, or a zip structure object as first parameter:

  • fileToZip: simplesmente passar 4D. File para compactar.

  • folderToZip: You pass a 4D. Folder to compress. Nesse caso, o parâmetro options permite compactar só os conteúdos da pasta (ou seja, excluir a pasta parente). Como padrão, ZIP Create archive compacta a pasta e seus conteúdos, assim a operação de descompactação vai recriar a pasta. Se quiser que a operação de descompactação restaure apenas os conteúdos da pasta, passe a cosntante ZIP Without enclosing folder no parâmetro options.

  • zipStructure: pode passar um objeto descrevendo o objeto ZIP archive. As propriedades abaixo estão disponíveis para definir a estrutura:

PropriedadeTipoDescrição
compressionInteger
  • ZIP Compression standard: Reduz a compactação (padrão)
  • ZIP Compression LZMA: compactação LZMA
  • ZIP Compression XZ: compactação XZ
  • ZIP Compression none: Sem compactação
  • levelIntegerNível de compressão. Valores possíveis: de 1 a 10. Um valor pequeno produz um arquivo de maior tamanho, enquanto um valor grande produz um arquivo de tamanho menor. O nível de compactação tem um impacto na performance. Valores padrão se omitidos:
  • ZIP Compression standard: 6
  • ZIP Compression LZMA: 4
  • ZIP Compression XZ: 4
  • encryptionIntegerA criptografia a usar se uma senha for estabelecida:
  • ZIP Encryption AES128: criptografia AES com uma chave de 128-bits.
  • ZIP Encryption AES192: criptografia AES com uma chave de 192-bits.
  • ZIP Encryption AES256: criptografia AES com chave de 256-bits (padrão se uma senha for estabelecida).
  • ZIP Encryption none: os dados não são criptografados (padrão se não estabelecer uma senha)
  • senhaTextUma senha a usar se a criptografia for necessária.
    filesCollection
  • a collection of 4D. File or 4D. Folder objects or
  • uma coleção de objetos com as propriedades abaixo:
  • PropriedadeTipoDescrição
    source4D. File or 4D. FolderFile ou Folder
    destinationText(opcional) especifique uma rota de arquivo relativa para mudar a organização dos conteúdos do arquivo
    optionnumber(opcional) - 'ZIP ignore invisible files' ou 0 para compactar o arquivo inteiro
    callback4D. FunctionUma fórmula de callback (retrochamada) que recebe o progresso da compactação (0-100) em $1.

    In the destinationFile parameter, pass a 4D. File object describing the ZIP archive to create (name, location, etc.). É recomendado usar a extensão ".zip" se quiser que o arquivo ZIP seja processado automaticamente por um software.

    Quando um arquivo for criado, pode usar o comando ZIP Read archive para acessá-lo.

    Objeto de estado

    O estado do objeto retornado contém as propriedades abaixo:

    PropriedadeTipoDescrição
    statusTextTextMensagem de erro (se houver):
  • Impossível abrir o arquivo ZIP
  • IMpossível criar o arquivo ZIP
  • Uma senha é necessária para criptografia
  • statusIntegerCódigo de estado
    successParâmetrosTrue se o arquivo for criado com sucesso, senão false

    Exemplo 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)

    Exemplo 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)

    Exemplo 3

    Para compactar uma estrutura de arquivo ZIP sem uma senha e barra de progresso:

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

    Exemplo

    Pode passar uma coleção de pastas e arquivos para compactar ao 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)

    Exemplo 2

    Deseja utilizar um algoritmo de compressão alternativo com um elevado nível de compressão:

    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 //padrão é 4

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

    ZIP Read archive

    Histórico
    VersãoMudanças
    v18Adicionado

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

    ParâmetroTipoDescrição
    zipFile4D. File->Arquivos Zip
    senhaText->Senha do arquivo ZIP, se houver
    ResultadosParâmetros<-Objeto arquivo

    |

    Descrição

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

    O comando não descompacta o arquivo ZIP, apenas oferece uma visão de seus conteúdos. Para extrair os conteúdos do arquivo, precisa usar métodos como file.copyTo() ou folder.copyTo().

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

    Se zipFile for protegido por uma senha, precisa usar o parâmetro opcional password ´para fornecer uma senha. Se uma senha for exigida mas não for passada, quando tentar ler os conteúdos do arquivo um erro será gerado.

    Objeto arquivo

    The returned 4D. ZipArchive object contains a single root property whose value is a 4D. ZipFolder object. Esta pasta descreve todo o conteúdo do ficheiro ZIP.

    Exemplo

    Para recuperar e ver os conteúdos de um 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 a lista dos arquivos e pastas no arquivo:

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

    Para extrair da pasta root:


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

    Para ler todos os conteúdos de um arquivo sem extraí-lo da pasta root:

      //extrair um arquivo
    $folderResult:=$files[$i].copyTo(Folder(fk desktop folder).folder("MyDocs"))

    //extrair todos os arquivos
    $folderResult:=$archive.root.copyTo(Folder(fk desktop folder).folder("MyDocs"))

    .root

    .root : 4D. ZipFolder

    Descrição

    A propriedade .root contém uma pasta virtual que permite o acesso ao conteúdo do arquivo ZIP.

    A pasta root e seus conteúdos podem ser manipulados com as funções e propriedades ZipFile e ZipFolder.

    Essa propriedade é apenas leitura.