Ver Mensaje Individual
  #6  
Antiguo 03-12-2013
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Reputación: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El error que describes es porque no as asignado el evento OnDestroy.

La pega que puede tener leer primero todos los archivos para guardarlos en un TStringList es que si son muchos se notará un retardo considerable antes de empezar a aparecer en el Label con lo que el programa parecerá "colgado". Una solución puede ser la siguiente, aprovechando el código expuesto y con alguna modificación mínima mas descartar el uso del Timer para usar un retardo Sleep(500):

Código:
void ListFiles(char *Dir, TLabel *L)
{
  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, L);
        }
      }
      else{
        L->Caption = String(fdt.name);
        Application->ProcessMessages();
        Sleep(500);
      }
    } while (_findnext(hFile, &fdt) == 0);
    _findclose(hFile);
  };
}
El uso sería así de simple:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  ListFiles("C:\\UNA_CARPETA", Label1);
}

Por supuesto que podemos encontrar muchísimas variantes más, pero esta es simple, fácil de entender y evita el trastorno de tener que esperar la lectura completa de la carpeta y subcarpetas en cuestión.


Saludos.
Responder Con Cita