6 de mayo de 2015

Retornar el nombre de todos los subdirectorios de un directorio

Función recursiva que retorna el nombre de todos los subdirectorios de un directorio pasado como parámetro.

*-----------------------------------------------------------------
* FUNCTION ASubdirectorios(taArray, tcRoot)
*-----------------------------------------------------------------
* Devuelve en un array pasado por referencia todos los nombres de
* subdirectorios del directorio "tcRoot".
* Los nombres son de la forma: [Unidad]:[\Directorio][\Subdirectorio]
* RETORNO: Cantidad de subdirectorios en el array. Si no encontró ningún
*    subdirectorio o el directorio "tcRoot" no existe, retorna 0 (cero)
* EJEMPLO DE USO:
*    DIMENSION laMiArray[1]
*    lnC = ASubdirectorios(@laMiArray, "C:\Mis Documentos\")
*    ? "Cantidad de subdirectorios:", lnC
*    FOR lnI = 1 to lnC
*       ? laMiArray[lnI]
*    ENDFOR
*-----------------------------------------------------------------
FUNCTION ASubdirectorios(taArray, tcRoot)
  IF EMPTY(tcRoot)
    tcRoot = SYS(5) + CURDIR()
  ENDIF
  DIMENSION taArray[1]
  =ARecur(@taArray, tcRoot)
  IF ALEN(taArray) > 1
    DIMENSION taArray[ALEN(taArray) - 1]
    RETURN ALEN(taArray)
  ELSE
    RETURN 0
  ENDIF
ENDFUNC
*-----------------------------------------------------------------
* FUNCTION ARecur(taArray, tcRoot)
*-----------------------------------------------------------------
* Funcion recursiva llamada por ASubdirectorios
*-----------------------------------------------------------------
FUNCTION ARecur(taArray, tcRoot)
  PRIVATE lnI, lnCant, laAux
  tcRoot = ADDBS(tcRoot)
  lnCant = ADIR(laAux, tcRoot + "*.", "D")
  FOR lnI = 1 TO lnCant
    IF "D" $ laAux[lnI, 5]
      IF laAux[lnI, 1] == "." OR laAux[lnI, 1] == ".."
        LOOP
      ELSE
        lcSubDir = tcRoot + laAux[lnI, 1]
        =ARecur(@taArray, lcSubDir)
        taArray[ALEN(taArray)] = ADDBS(tcRoot + laAux[lnI, 1])
        DIMENSION taArray[ALEN(taArray) + 1]
        LOOP
      ENDIF
    ENDIF
  ENDFOR
  RETURN
ENDFUNC
*-----------------------------------------------------------------
Luis María Guayán

No hay comentarios. :

Publicar un comentario