FindFiles (VFP)
(Difference between revisions)
VictorEspina (Talk | contribs) |
VictorEspina (Talk | contribs) |
||
Line 88: | Line 88: | ||
ENDFUNC | ENDFUNC | ||
</pre> | </pre> | ||
+ | |||
+ | |||
+ | ==Ver también== | ||
+ | *[[FindFolders]] | ||
[[Category:Visual FoxPro]] | [[Category:Visual FoxPro]] |
Revision as of 04:45, 5 May 2015
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