FindFiles (VFP)

From codeWiki
Jump to: navigation, search

Esta función permite buscar archivos dentro de una carpeta o sus subcarpetas, devolviendo una lista de todos los archivos encontrados que coinciden con el pátron de búsqueda indicado. El parámetro pnNestLevel permite indicar que tan adentro de la estructura de archivos se desea buscar:


  • Si no se indica un valor para el parametro, se busca en todas las subcarpetas
  • Si se indica cero, se busca solo en la carpeta indicada
  • Si se indica 1, se busca en la carpeta indicada y en sus subcarpetas solamente.


La función devuelve la cantidad de archivos encontrados. El parámetro paFiles debe ser declarado previamente como un ARRAY y debe pasarse por referencia.


Ejemplos

  • Listar todos los archivos PRG de la carpeta indicada:
LOCAL ARRAY aFiles[1]
nCount = findfiles(@aFiles, "c:\programas", "*.prg*, 0)
  • Buscar todos los archivos DLL dentro de la carpeta Windows (incluyendo todas las subcarpetas):
LOCAL ARRAY aFiles[1]
nCount = findfiles(@aFiles, "c:\windows", "*.dll*)


Código

* findFiles (Function)
* Permite ubicar archivos dentro de una ruta, mediante un patròn de búsqueda. La
* función devuelve la cantidad de archivos encontrados y en el parámetro paFiles
* (que debe ser pasado por referencia) devuelve la lista de archivos.
* 
* Autor: Victor Espina 
* Fecha: Oct 2014
*
* Ejemplo:
* LOCAL ARRAY paFiles[1]
* nCount = findFiles(@paFiles, "c:\", "*.prg")
*
* El parametro pnNestLevel permite indicar un limite de recursion, para limitar
* la cantidad de subdirectorios a considerar en la busqueda. Por ejemplo, para
* buscar archivos DLL en una ruta o en sus subdirectorios directos, hariamos:
*
* nCount = findFiles(@paFiles, "c:\windows", "*.dll", 1)
*
FUNCTION findFiles(paFiles, pcFolder, pcWildcard, pnNestlevel, pnCurrentLevel)
 
 * Si asignan valores por defecto a los parametros opcionales
 pcWildcard = IIF(EMPTY(pcWildcard),"*.*",pcWildcard)
 pnNestLevel = IIF(EMPTY(pnNestLevel),-1,pnNestLevel)
 pnCurrentLevel = IIF(EMPTY(pnCurrentLevel),0,pnCurrentLevel)
 
 * Se inicia la busqueda
 LOCAL ARRAY aMatchs[1]
 LOCAL nCount,i,cFile,cSubFolder,nSize
 nSize = ALEN(paFiles,1)
 IF EMPTY(paFiles[1])   && El array esta vacio
  nSize = 0 
 ENDIF
 
 * Buscamos dentro de la ruta indicada
 pcFolder = ADDBS(pcFolder)
 nCount = ADIR(aMatchs, pcFolder + pcWildcard)
 FOR i = 1 TO nCount
  nSize = nSize + 1
  DIMEN paFiles[nSize]
  paFiles[nSize] = pcFolder + aMatchs[i,1]
 ENDFOR
 
 * Si se llego al maximo nivel de anidamiento, se finaliza aqui
 IF pnCurrentLevel = pnNestLevel
  RETURN nSize
 ENDIF
 
 * Buscamos ahora dentro de las carpetas
 nCount = ADIR(aMatchs, pcFolder + "*.*", "D")
 FOR i = 1 TO nCount
  cSubFolder = aMatchs[i,1]
  IF "D" $ aMatchs[i,5] AND !INLIST(cSubFolder,".","..")
   cSubFolder = pcFolder + cSubFolder
   nSize = findFiles(@paFiles, cSubFolder, pcWildcard, pnNestLevel, pnCurrentLevel + 1)
  ENDIF
 ENDFOR
 
 RETURN nSize
ENDFUNC


Ver también

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox