Ver Mensaje Individual
  #2  
Antiguo 22-11-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita