Mario Wereka Cdt

Registrado: 06 Abr 2004Mensajes: 8Ubicación: Torreon, Coah. Mexico
|
Publicado: Mar 06 Abr, 2004 8:38 pm Asunto: Rutina para buscar archivos apartir de directorio base |
|
|
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 |
|