miércoles, abril 22, 2015

Rutinas VFP: Cómo obtener todos los nombres de archivo de un directorio y subdirectorios

Por: Fernando D. Bozzo

Esto parece que es algo bastante solicitado, así que ahí va, lista para usar en una librería de procedimientos PRG.

Solo requiere indicar el directorio, un array por referencia y una variable por referencia para devolver la información.



*-- USO: Suponiendo que se copie en LIB.PRG
SET PROCEDURE TO lib.prg
DIMENSION aFiles(1,1)
nCount = 0
get_FilesFromDirectory( "C:\DESA\Plastic\", @aFiles, @nCount)
? nCount




    PROCEDURE get_FilesFromDirectory
        LPARAMETERS tcDir, taFiles, lnFileCount
        EXTERNAL ARRAY taFiles

        LOCAL laFiles(1), I, lnFiles

        IF TYPE("ALEN(laFiles)") # "N" OR EMPTY(lnFileCount)
            lnFileCount = 0
            DIMENSION taFiles(1)
        ENDIF

        tcDir    = ADDBS(tcDir)

        IF DIRECTORY(tcDir)
            lnFiles = ADIR( laFiles, tcDir + '*.*', 'D', 1)

            *-- Busco los archivos
            FOR I = 1 TO lnFiles
                IF SUBSTR( laFiles(I,5), 5, 1 ) == 'D'
                    LOOP
                ENDIF
                lnFileCount    = lnFileCount + 1
                DIMENSION taFiles(lnFileCount)
                taFiles(lnFileCount)    = tcDir + laFiles(I,1)
            ENDFOR

            *-- Busco los subdirectorios
            FOR I = 1 TO lnFiles
                IF NOT SUBSTR( laFiles(I,5), 5, 1 ) == 'D' ;

                       OR LEFT(laFiles(I,1), 1) == '.'
                    LOOP
                ENDIF
                get_FilesFromDirectory( tcDir + laFiles(I,1), ;

                   @taFiles, @lnFileCount )
            ENDFOR
        ENDIF
    ENDPROC



Saludos!

1 comentario:

  1. Fernando...idolo... excelente contribución.
    Saludos desde Paraguay.

    ResponderEliminar