PDA

Ver la Versión Completa : Listar los archivos de un determinado directorio


dec
07-06-2006, 19:49:40
El siguiente procedimiento lista los archivos que cumplan con una determinada máscara y se encuentren en un determinado directorio.

Los archivos se devuelven en la variable "lista", que se pasa como parámetro por referencia al procedimiento. Pueden obtenerse tan sólo los nombres de los archivos, si así se requiere.


uses
SysUtils;

procedure ArchivosDirectorio(dir, mascara: string;
var lista: TStrings; const soloNombres: boolean);
var
SR: TSearchRec;
begin
dir := IncludeTrailingPathDelimiter(dir);
if FindFirst(dir + mascara, faAnyFile, SR) = 0 then
begin
repeat
if not soloNombres then
lista.Add(ExtractFileName(ChangeFileExt(dir + SR.Name, '')))
else
lista.Add(dir + SR.Name);
until FindNext(SR) <> 0;
SysUtils.FindClose(SR);
end;
end;

Neftali [Germán.Estévez]
23-11-2006, 17:22:17
Esta variante funciona de manera 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.
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 directorio 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
DirList.Add(StartDir + SR.Name);
IsFound := FindNext(SR) = 0;
end;
FindClose(SR);

// Scan the list of subdirectories
for i := 0 to DirList.Count - 1 do
FindFiles(DirList[i], FileMask, recursively, FilesList);
finally
DirList.Free;
end;
end;
end;

PEIIB
09-03-2018, 10:23:04
Muchas gracias por vuestros aportes.
Despues de años y años, siguen siendo muy útiles!

dec
09-03-2018, 11:18:43
Hola a todos,

Muchas gracias por vuestros aportes.
Despues de años y años, siguen siendo muy útiles!

Hay que agradecérselo a Microsoft Windows y a Embarcadero Delphi. :)