Mensaje    Asunto: Rutina para buscar archivos apartir de directorio base Responder citando

Solo crea una nueva aplicacion o forma

Pega:
1 StringGrid //Para mostrar resultados de busqueda

2 Edit // Edit1 para pasarle las condiciones de busqueda Ej. *.mp3
// Busca todos los archivos mp3 que se encuentren
// apartir del directorio pasado en Edit2

7 CheckBox //Condiciones; Oculto, De sistema, Archivo, Directorio
//checa el codigo para saber cual le corresponde a cada uno
1 Label //Muestra el numero de coincidencias encontradas
1 BitBtn //Ejecuta la rutina de busqueda


El codigo para el Cpp
Código:

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

//---------------------------------------------------------------------------
AnsiString Stack::Pop(void)
{
  if(!isEmpty())
  {
   AnsiString Tmp=Lista->Strings[Lista->Count-1];
   Lista->Delete(Lista->Count-1);
   return Tmp;
  }
  else
   return "";
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  stack = new Stack();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{

  Cuantos=0;
  iAttributes=0;
 //---------INSERTAMOS EN LA PILA EL DIRECTORIO BASE (DONDE EMPIEZA LA BUSQUEDA)
 stack->Push(Edit2->Text);

 StringGrid1->RowCount = 2;
 while(!stack->isEmpty())
 {
   //SACAMOS EL DIRECTORIO QUE ESTA EN LA PILA
   Dir=IncludeTrailingBackslash(stack->Pop());

  iAttributes |= faDirectory;
  iAttributes |= faReadOnly ;
  iAttributes |= faHidden;
  iAttributes |= faSysFile;
  iAttributes |= faAnyFile ;
//--------Insertamos en la Pila todos los subdirectorios del directorio actual---------------------------------------
  if (FindFirst(Dir+"*", iAttributes, sr) == 0)
  {
    do
    {
     //---------VERIFICAMOS QUE SEA DIRECTORIO Y QUE NO SEAN LOS DIRECTORIOS "." y ".."
     if (((sr.Attr & faDirectory) >0)&&!(sr.Name=="."||sr.Name==".."))
        stack->Push(Dir+sr.Name);
    }while (FindNext(sr) == 0);
    FindClose(sr);
  }
//------------BUSCAMOS TODOS LOS ARCHIVOS QUE COINCIDAN CON LA BUSQUEDA en el directorio actual-------------------------------------
  iAttributes = 0;
  iAttributes |= faReadOnly * CheckBox1->Checked;
  iAttributes |= faHidden * CheckBox2->Checked;
  iAttributes |= faSysFile * CheckBox3->Checked;
  iAttributes |= faVolumeID * CheckBox4->Checked;
  iAttributes |= faDirectory * CheckBox5->Checked;
  iAttributes |= faArchive * CheckBox6->Checked;
  iAttributes |= faAnyFile * CheckBox7->Checked; //SI ESTA ACTIVADA LOS DEMAS SON IGNORADOS

  if (FindFirst(Dir+Edit1->Text, iAttributes, sr) == 0)
  {
    do
    {
      if ((sr.Attr & iAttributes) == sr.Attr&&!(sr.Name=="."||sr.Name==".."))
      {
        StringGrid1->RowCount = StringGrid1->RowCount + 1;
        StringGrid1->Cells[0][StringGrid1->RowCount-1] = sr.Name;
        StringGrid1->Cells[2][StringGrid1->RowCount-1] = IntToStr(sr.Size);
        StringGrid1->Cells[1][StringGrid1->RowCount-1] = Dir;
        Cuantos++;
      }
    }while (FindNext(sr) == 0);
    FindClose(sr);
  }

 }
 Label1->Caption=Cuantos;
}
//---------------------------------------------------------------------------



y para el H

Código:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Buttons.hpp>
#include <Grids.hpp>
#include <ExtCtrls.hpp>

class Stack
{
 private:
  TStringList *Lista;
 public:
  Stack(){Lista=new TStringList();}
  ~Stack(){delete Lista;}
  bool isEmpty(void){return (Lista->Count==0)?true:false;}
  void Push(AnsiString d){Lista->Add(d);};
  AnsiString Pop(void);
  void   toEmpty(void){Lista->Clear();};
  int Lenght(void){return Lista->Count;}
};
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:   // IDE-managed Components
        TStringGrid *StringGrid1;
        TPanel *Panel1;
        TEdit *Edit1;
        TEdit *Edit2;
        TLabel *Label1;
        TBitBtn *BitBtn1;
        TPanel *Panel2;
        TCheckBox *CheckBox1;
        TCheckBox *CheckBox2;
        TCheckBox *CheckBox3;
        TCheckBox *CheckBox4;
        TCheckBox *CheckBox5;
        TCheckBox *CheckBox6;
        TCheckBox *CheckBox7;
        void __fastcall BitBtn1Click(TObject *Sender);
private:
 Stack *stack;
 int Cuantos;
  TSearchRec sr;
  int iAttributes;   // User declarations
public:

AnsiString Dir;

   // User declarations
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif



No olvides registrar el evento Onclik del BitBtn

Si deseas ver como se llena el stringgrid mientras busca deberas poner el codigo dentro de un Thead
_________________
No dudes en preguntar, tus problemas presentes pueden ser mis problemas futuros.

Todo lo que esta en la imaginacion del hombre es posible