Función para realizar búsquedas recursivas tomando como referencia el nombre o la extensión de los archivos a buscar:
void Buscar(String Path,String File,TStringList *Lista, String Ext)
{
TSearchRec SR;
int i = FindFirst(Path+"\\*.*",faAnyFile,SR);
while (i == 0)
{
// si la carpeta es distinta de "." o ".." busca dentro de ella
if ((SR.Name != ".") && (SR.Name != ".."))
Buscar(Path+"\\"+SR.Name,File,Lista,Ext);
// si la búsqueda es por nombre
if (File != "")
{
if (SR.Name.LowerCase() == File.LowerCase())
Lista->Add(Path+"\\"+SR.Name);
}
else
// si la búsqueda es por extensión
if ( Ext != "" )
if ( ExtractFileExt( SR.Name ) == Ext )
Lista->Add(Path+"\\"+SR.Name);
i = FindNext(SR);
// Status = Path+"\\"+SR.Name;
// esto es para que la ventana no se bloquee y procese
// los mensajes de la cola; si la búsqueda es en background
// puedes quitar esto y buscará más rápido.
Application->ProcessMessages();
}
FindClose(SR);
}
/*-------------------------------
- Ejemplo de búsqueda por nombre:
-------------------------------*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *slFiles;
slFiles = new TStringList;
//busca en "C:\Windows" todos los archivos con nombre "notepad.exe"
Buscar("C:\\Windows", "notepad.exe", slFiles, "");
Memo1->Lines->Assign(slFiles );
delete slFiles;
}
/*-------------------------------
- Ejemplo búsqueda por extensión:
-------------------------------*/
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList *slFiles;
slFiles = new TStringList;
// busca en "C:\Windows" todos los .exe
Buscar("C:\\Windows", "", slFiles, ".exe");
Memo1->Lines->Assign( slFiles );
delete slFiles;
}
