Exemplo de manipulação de arquivos

A pedido de um amigo segue mais um exemplo de manipulação de arquivos usando a linguagem progress.

Desta vez o objetivo é monitorar um diretório de arquivos temporários, a rotina tem que limpar todos os arquivos onde o tipo do arquivo não faça parte da lista (txt, ord ou bat) ou tenha mais de dois dias armazenado.

Segundo ele esse diretório vai ser usado para fazer upload de relatórios então é gerado um link para download para que outra pessoa o baixe,  para não lotar o servidor os arquivos ficam armazenados por dois dias.

define variable tipo as character no-undo.

define temp-table ttArquivos
    field arquivo    as character format "x(30)"
    field diretiorio as character format "x(90)"
    field tipo       as character format "x(5)".

    OS-COMMAND SILENT VALUE("MOVE " + vArquivo + " " + vDestino).

    /* Limpando os arquivos de orçamento velhos */
    assign vDestino = "C:\temp\".

    input from OS-DIR(vDestino).
    REPEAT :
        CREATE ttArquivos.
        IMPORT ttArquivos.
    END.

    /* Loop nos registros que não são diretorio/pasta */
    for each  ttArquivos
        where ttArquivos.tipo <> "D"
        :
        /* Se o arquivo realmente existir */
        IF SEARCH(ttArquivos.diretiorio) <> ? THEN do:
            /* Ler dados do arquivo */
            assign FILE-INFO:FILE-NAME = ttArquivos.diretiorio.
            /* Se for arquivo do tipo ord */
            if index(ttArquivos.arquivo, ".ord") > 0  then
                /* Se for mais velho que dois dias */
                if FILE-INFO:FILE-MOD-DATE < (today - 2) then do:
                    /* Deleta o arquivo */
                    OS-DELETE VALUE(ttArquivos.diretiorio).
                END.
            
            /* Pegando apenas a extenção do arquivo */
            assign tipo = substring(FILE-INFO:file-name, r-index(FILE-INFO:file-name, ".") + 1,length(FILE-INFO:file-name)).
    
            /* Se a extenção não estiver na lista de liberado */
            if lookup(tipo, "txt,ord,bat") = 0 then
                /* Deleta o arquivo */
                OS-DELETE VALUE(ttArquivos.diretiorio).

        END.

Qualquer duvida estou a disposição.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.