Árvore de páginas

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âmetroTipo do dado

Descrição

zipFileNameINPUTCHARACTER

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.

passwordINPUTCHARACTER

Senha de acesso aos arquivos do .ZIP gerado.

Este parâmetro é utilizado apenas na procedure interna zipFilesEncryp.

lsobrescreve INPUTLOGICALIndica 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.

  1. Ocorrência de erro progress 11678 “REPLACE/CONCAT may not result in data >  bytes. (11678)” quando esta temp-table recebe muitos arquivos.
  2. 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.