Buscar ficheros en un directorio y guardarlos en un TStringList (recursico)
Función para buscar ficheros en un directorio de forma recursiva.
Devuelve una lista de nombres de fichero encontrados a partir de la carpeta inicial StartDir, que cumplen el patrón especificado por FileMask.
Mediante recursively se indica si se desea
hacer la busqueda en los subdirectorios.
El resultado se devuelve en FilesList (TStringList), que es la lista que se rellena con los nombres de fichero encontrados.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | {: Devuelve una lista de nombres de fichero encontrados a partir de la carpeta inicial StartDir, que cumplen el patrón especificado por FileMask.Mediante recursively se indica si se desea hacer la busqueda en los subdirectorios. StartDir Carpeta desde la que empezar a buscar. FileMask Patrón que han de cumplir los ficheros. Recursively Si hay que continuar la búsqueda en los subdirectorios. FilesList Lista con los nombres de fichero encontrados. } procedure FindFiles(StartDir, FileMask: string; recursively: boolean; var FilesList: TStringList); const MASK_ALL_FILES = '*.*'; CHAR_POINT = '.'; var SR: TSearchRec; DirList: TStringList; IsFound: Boolean; i: integer; begin if (StartDir[length(StartDir)] <> '\') then begin StartDir := StartDir + '\'; end; // Crear la lista de ficheos en el dir. StartDir (no directorios!) IsFound := FindFirst(StartDir + FileMask, faAnyFile - faDirectory, SR) = 0; // MIentras encuentre while IsFound do begin FilesList.Add(StartDir + SR.Name); IsFound := FindNext(SR) = 0; end; FindClose(SR); // Recursivo? if (recursively) then begin // Build a list of subdirectories DirList := TStringList.Create; // proteccion try IsFound := FindFirst(StartDir + MASK_ALL_FILES, faAnyFile, SR) = 0; while IsFound do begin if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> CHAR_POINT) then begin DirList.Add(StartDir + SR.Name); IsFound := FindNext(SR) = 0; end; // if end; // while FindClose(SR); // Scan the list of subdirectories for i := 0 to DirList.Count - 1 do begin FindFiles(DirList[i], FileMask, recursively, FilesList); end; finally DirList.Free; end; end; end; |
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…