CONTEÚDO
01. Visão geral
A api utp\ut-zip.p permite a criação de arquivos compactados (.zip).
02. Considerações gerais
- Os procedimentos internos zipFiles e zipFilesEncrypt recebem como parâmetros os atributos e dados para criação do arquivo .zip desejado e é retornada uma temp-table com os possíveis erros.
- A include {utp/ut-zip.i} contém as definições das temp-table´s que devem ser passadas como parâmetro para o procedimentos internos zipFiles e zipFilesEncrypt. Sendo que a chamada desta include, a inclusão de valores e a execução do utilitário em modo persistente, deve ser feito antes da chamada aos procedimentos internos zipFiles ou zipFilesEncrypt.
03. Implementação
Parâmetros
Variável | Tipo do parâmetro | Tipo do dado | Descrição |
---|---|---|---|
zipFileName | INPUT | CHARACTER | Endereço completo do arquivo .ZIP a ser gerado. Exemplo: c:\tmp\teste.zip |
tt-listFiles cFile lSearch | INPUT | TEMP-TABLE CHARACTER X(200) LOGICAL
| Tabela temporária que irá armazenar as informações referentes a cada um dos arquivos que deve ser inserido no arquivo .ZIP gerado. cFile: indica o nome do arquivo que deve ser inserido no ZIP gerado. lSearch: indica se o arquivo informado foi encontrado pelo utilitário. Valor padrão é false. |
password | INPUT | CHARACTER | Senha de acesso aos arquivos do .ZIP gerado. Este parâmetro é utilizado apenas na procedure interna zipFilesEncryp. |
lsobrescreve | INPUT | LOGICAL | Indica se o utilitário deve sobrescrever o arquivo ZIP caso ele já exista. |
tt-erros Cod-Erro Desc-Erro | OUTPUT | TEMP-TABLE INTEGER CHARACTER | Tabela temporária que irá armazenar os dados referentes aos erros encontrados na manipulação dos dados das tabelas de entrada. Cod-Erro: número do erro. Sequencial dentro da temp-table. Desc-Erro: descrição do erro. |
Importante
Após a chamada feita ao utilitário é imprescindível tratar os erros na temp-table tt-erros caso existam.
Exemplo Padrão:
{utp/ut-zip.i} define variable h-zip as handle no-undo. run utp/ut-zip.p persistent set h-zip. create tt-listfiles. assign tt-listfiles.cfile = "c:\temp\teste01.txt". create tt-listfiles. assign tt-listfiles.cfile = "c:\temp\teste02.txt". run zipfiles in h-zip (input "c:\temp\teste01.zip", input table tt-listfiles, input true, output table tt-erros). for each tt-erros: disp tt-erros. end. run zipfilesencrypt in h-zip (input "c:\temp\teste02.zip", input table tt-listfiles, input "senha", input false, output table tt-erros). for each tt-erros: disp tt-erros. end. delete procedure h-zip.
Exemplo adaptado para grande volume de arquivos:
{utp/ut-zip.i} def temp-table ttlista2 like tt-listfiles. define variable arquivo as character no-undo. define variable h-zip as handle no-undo. run utp/ut-zip.p persistent set h-zip. input from os-dir("c:\temp\ziptest"). repeat: import arquivo. if arquivo begins '.' then next. create ttlista2. assign ttlista2.cfile = "c:\temp\ziptest\" + arquivo. end. input close. for each tt-listfiles where tt-listfiles.cfile = '': delete tt-listfiles. end. pause 0 before-hide. for each ttlista2: disp ttlista2.cfile label 'arquivo' format 'x(50)' with side-label frame flabel size 70 by 3 view-as dialog-box. process events. create tt-listfiles. buffer-copy ttlista2 to tt-listfiles. run zipfiles in h-zip (input "c:\temp\teste02.zip", input table tt-listfiles, input true, output table tt-erros). delete tt-listfiles. end. for each tt-erros: disp tt-erros. end. delete procedure h-zip.
04. Informações adicionais
Caso ocorram erros relacionados com a passagem de grande número de arquivos a serem compactados no mesmo zip, conforme exemplos abaixo, recomenda-se passar um arquivo por vez para o mesmo arquivo zip. Utilizando este formato é possível realizar a compactação de dois mil arquivos no mesmo zip.
- Ocorrência de erro progress 11678 “REPLACE/CONCAT may not result in data > bytes. (11678)” quando esta temp-table recebe muitos arquivos.
- Limitação do sistema operacional com tamanho de instrução que limita em 8191 caracteres a linha de comando no Windows XP ou mais recente.