Dica Lendo estrutura de diretórios

Discussão em 'Comandos Básicos' iniciado por jc01, Março 24, 2015.

  1. jc01

    jc01 Membro Participativo

    O exemplo abaixo lê uma estrutura de diretórios, através de um diretório raiz, e guarda todos os arquivos encontrados em pastas e subpastas numa temp-table.

    Código:
    DEF TEMP-TABLE tt-aux NO-UNDO
            FIELD nome-relativo AS CHAR
            FIELD nome-absoluto AS CHAR
            FIELD atributos AS CHARACTER.
     
    DEF TEMP-TABLE tt-arquivos NO-UNDO
            FIELD nome-relativo AS CHAR
            FIELD nome-absoluto AS CHAR.
     
    /*
        Objetivo: percorre a partir de um diretório raiz e guarda todos os arquivos encontrados
        em pastas e subpastas na temp-table passada por parâmetro.
    */
    PROCEDURE pi-percorre-dir:
        DEF INPUT PARAM c-dir AS CHAR NO-UNDO. /* diretório para busca de arquivos */
        DEF INPUT-OUTPUT PARAM TABLE FOR tt-arquivos. /* tt que guardará o nome relativo e absoluto dos arquivos encontrados */
        DEF INPUT PARAM TABLE FOR tt-aux. /* tt usada para capturar informações dos arquivos/diretórios através do OS-DIR */
     
        INPUT FROM OS-DIR(c-dir) CONVERT SOURCE "iso8859-1".
        REPEAT: /* varre o diretório */
            EMPTY TEMP-TABLE tt-aux. /* garante que tt terá sempre apenas um registro */
            CREATE tt-aux.
            IMPORT tt-aux.
     
            FIND FIRST tt-aux. /* aponta para o registro */
     
            IF TRIM(tt-aux.nome-relativo) <> ""
                    AND TRIM(tt-aux.nome-relativo) <> "."
                    AND TRIM(tt-aux.nome-relativo) <> ".." THEN DO:
     
                IF tt-aux.atributos = "D" THEN /* se objeto lido for uma pasta, executa recursivamente a mesma procedure em busca dos arquivos dentro desta pasta */
                    RUN pi-percorre-dir(INPUT tt-aux.nome-absoluto, INPUT-OUTPUT TABLE tt-arquivos, INPUT TABLE tt-aux).
                ELSE DO: /* senão, guarda nome absoluto e relativo do arquivo dentro da tt responsável */
                    CREATE tt-arquivos.
                    ASSIGN tt-arquivos.nome-absoluto = LOWER(tt-aux.nome-absoluto)
                           tt-arquivos.nome-relativo = LOWER(tt-aux.nome-relativo).
     
                END.
            END.
     
        END. /* REPEAT */
     
        INPUT CLOSE.
        EMPTY TEMP-TABLE tt-aux.
     
    END. /* PROCEDURE pi-percorre-dir */
     
    RUN pi-percorre-dir(INPUT "c:\pasta_raiz", INPUT-OUTPUT TABLE tt-arquivos, INPUT TABLE tt-aux).
     
    FOR EACH tt-arquivos:
        DISP tt-arquivos.nome-absoluto FORMAT "X(70)".
    END.
    fabiano.bonassa e pizzaia curtiram isso.

Compartilhe esta Página