FindFolders (VFP)

From codeWiki
Revision as of 04:52, 5 May 2015 by VictorEspina (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Esta función permite buscar carpetas dentro de una carpeta o sus subcarpetas, devolviendo una lista de todas las carpetas encontradas 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 parámetro, 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 carpetas encontradas. El parámetro paFolders debe ser declarado previamente como un ARRAY y debe pasarse por referencia.


Ejemplos

  • Listar todas las carpetas Archivos de la carpeta indicada:
LOCAL ARRAY aFolders[1]
nCount = findFolders(@aFolders, "c:\", "Archivos**, 0)
  • Buscar todas las carpetas BIN dentro de la carpeta Windows (incluyendo todas las subcarpetas):
LOCAL ARRAY aFolders[1]
nCount = findFolders(@aFolders, "c:\windows", "bin*)


Código

* findFolders (Function)
* Permite ubicar carpetas dentro de una ruta, mediante un patròn de búsqueda. La
* función devuelve la cantidad de carpetas encontradas y en el parámetro paFolders
* (que debe ser pasado por referencia) devuelve la lista de carpetas.
* 
* Autor: Victor Espina 
* Fecha: May 2015
*
* Ejemplo:
* LOCAL ARRAY paFolders[1]
* nCount = findFolders(@paFolders, "c:\", "Program*")
*
* El parametro pnNestLevel permite indicar un limite de recursion, para limitar
* la cantidad de subdirectorios a considerar en la busqueda. Por ejemplo, para
* buscar carpetas BIN en una ruta o en sus subdirectorios directos, hariamos:
*
* nCount = findFolders(@paFolders, "c:\windows", "bin", 1)
*
FUNCTION findFolders(paFolders, 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,cFolder,cSubFolder,nSize
 nSize = ALEN(paFolders,1)
 IF EMPTY(paFolders[1])   && El array esta vacio
  nSize = 0 
 ENDIF
 
 * Buscamos dentro de la ruta indicada
 pcFolder = ADDBS(pcFolder)
 nCount = ADIR(aMatchs, pcFolder + pcWildcard, "D")
 FOR i = 1 TO nCount
  nSize = nSize + 1
  DIMEN paFolders[nSize]
  paFolders[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 = findFolders(@paFolders, cSubFolder, pcWildcard, pnNestLevel, pnCurrentLevel + 1)
  ENDIF
 ENDFOR
 
 RETURN nSize
ENDFUNC

Ver también

Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox