Hola darkmir.
La forma mas simple de concebir el algoritmo es de forma recursiva:
Código:
#include <io.h>
#include <dir.h>
void ListFiles(char *Dir, TListBox *LB)
{
struct _finddata_t fdt;
long hFile;
char tmp[MAX_PATH];
chdir(Dir);
fdt.attrib = _A_SUBDIR;
if( (hFile = _findfirst("*.*", &fdt) ) != -1) {
do {
if (fdt.attrib == _A_SUBDIR) {
if (strcmp(fdt.name,".")!= 0 && strcmp(fdt.name,"..") != 0) {
strcpy(tmp, Dir);
strcat(tmp, "\\");
strcat(tmp, fdt.name);
ListFiles(tmp, LB);
}
}
else
LB->Items->Add(String(fdt.name));
} while (_findnext(hFile, &fdt) == 0);
_findclose(hFile);
};
}
Sin embargo, si estas usando
C++ Builder, es mas simple hacer:
Código:
void ListFiles(AnsiString Dir, TListBox *LB)
{
TSearchRec sr;
ChDir(Dir);
if (FindFirst("*.*", faDirectory, sr) == 0) {
do {
if (sr.Attr == faDirectory) {
if (sr.Name != "." && sr.Name != "..")
ListFiles(Dir + "\\" + sr.Name, LB);
} else
LB->Items->Add(sr.Name);
} while (FindNext(sr) == 0);
FindClose(sr);
}
}
Ejemplo de uso para ambas funciones:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListFiles("C:\\UNA_CARPETA", ListBox1);
}
Saludos