0 2 mins 1 semana

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;
} 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *