procedure BuscarArchivos(const directorio, mascara: string;
atributos: Integer; var listado: TStrings);
procedure Buscar(const subdirectorio: string);
var
regBusqueda: TSearchRec;
begin
if FindFirst(subdirectorio + mascara,atributos,regBusqueda) = 0 then
begin
try
repeat
Application.ProcessMessages;
if (regBusqueda.Attr and faDirectory = 0)
or (regBusqueda.Name <> '.')
and (regBusqueda.Name <> '..') then
listado.Add(subdirectorio + regBusqueda.Name);
until FindNext(regBusqueda) <> 0;
except
FindClose(regBusqueda);
end;
FindClose(regBusqueda);
end;
if FindFirst(subdirectorio + '*', atributos
or faDirectory, regBusqueda) = 0 then
begin
try
repeat
Application.ProcessMessages;
if ((regBusqueda.Attr and faDirectory) <> 0)
and (regBusqueda.Name <> '.')
and (regBusqueda.Name <> '..') then
Buscar(subdirectorio + regBusqueda.Name + '\');
until FindNext(regBusqueda) <> 0;
except
FindClose(regBusqueda);
end;
FindClose(regBusqueda);
end;
end;
begin
Buscar(IncludeTrailingPathDelimiter(directorio));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
lista: TStrings;
begin
lista := TStringList.Create;
BuscarArchivos('C:\', '*.exe', faAnyFile, lista);
ShowMessage(lista.Text);
lista.Free;
end;