PDA

Ver la Versión Completa : Buscar archivos con TSearchRec


dec
20-06-2006, 10:27:28
(*

Busca y lista los archivos que cumplan con determinada
máscara y que se encuentren en un determinado directorio
y/o dentro de los subdirectorios del mismo.

Parámetros:

directorio: en el que buscar, por ejemplo: C:\
mascara: de archivo, por ejemplo: *.txt
atributos: de los archivos, por ejemplo: faAnyFile
listado: donde guardar los posibles resultados (1)

(1) Rutas completas de los archivos encontrados

*)

procedure BuscarArchivos(const directorio, mascara: string;
atributos: Integer; var listado: TStrings);

// Procedimiento anidado
//
procedure Buscar(const subdirectorio: string);
var
regBusqueda: TSearchRec;
begin
// Buscar en el directorio
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;
// Buscar en los subdirectorios
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;
//
// Fin del procedimiento anidado:
// Comienza "BuscarArchivos(...)"
//
begin
Buscar(IncludeTrailingPathDelimiter(directorio));
end;

// Ejemplo de llamada a BuscarArchivos(...)
//
procedure TForm1.Button1Click(Sender: TObject);
var
lista: TStrings;
begin
lista := TStringList.Create;
BuscarArchivos('C:\', '*.exe', faAnyFile, lista);
ShowMessage(lista.Text);
lista.Free;
end;

seoane
11-08-2006, 20:42:30
Si queremos realizar la búsqueda sobre todos los discos duros, seria algo así:


var
Lista: TStrings;
Letra: Char;
begin
Lista := TStringList.Create;
try
for Letra:= 'A' to 'Z' do
if GetDriveType(Pchar(Letra+':\')) = DRIVE_FIXED then
BuscarArchivos(Letra+':\', '*.exe', faAnyFile, lista);
ShowMessage(lista.Text);
finally
Lista.Free;
end;
end;