![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Gracias, me funciono bien.
Gracias ecfisa,
el codigo hace justo lo que necesitaba, mi unico inconveniente es que ambos codigos me leen sin problemas cuando pongo una unidad (E:\\), pero cuando pongo (E:\\LOGS\\) osea una unidad + "cualquier carpeta", me manda un error y no termina mi programa, lo solucione con un try{}catch(...){} cuando llamo la función, pero tratare de arreglarlo sin necesidad de un try-catch, veo que podria ser algun problema al momento de leer alguna carpeta especifica dentro de una unidad y como hay otras carpetas genera ese error, pero en fin es lo de menos. Te agradesco por la ayuda. ![]() |
|
#2
|
||||
|
||||
|
Hola darkmir.
La verdad no me explico ese comportamiento... Probé ambos códigos usando sólo la unidad, una carpeta, una carpeta y subcarpeta y funciona correctamente, como ejemplo: Código:
ListFiles("C:\\WINDOWS\\FONTS\\", ListBox1);
Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#3
|
|||
|
|||
|
Hola ecfisa,
bueno , en si, no me manda ningún mensaje de error, pero se cuelga y se cierra el programa, me he dado cuenta que es con carpetas que tienen bastantes archivos, por ejemplo lo hice con "F:\\DOCUMENTOS\\" y ahi sale se cuelga, tengo algo de 400 gb de contenido, lo depure para ver el error y sale esto: ![]() pero lo arregle con try catch, ahora no me sale error, pero me parece que fuera por los atributos porque solo me pasa con esa carpeta y con la carpeta "C:\\windows\\", con otras carpetas corre sin problemas. Otra consulta, quise hacerlo en uno solo la funcion y la llamada pero no me sale exactamente como los anteriores codigos, como por ejemplo,unir en uno solo este código el cual me proporcionaste: Código:
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);
};
}
/////////////////////////////////////////////////////////
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListFiles("F:\\", ListBox1);
}
//---------------------------------------------------------------------------
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *Dir = "F:\\";
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
ListBox1->Items->Add(fdt.name); // para escoger que listar, archivos o carpetas.
} while (_findnext(hFile, &fdt) == 0);
_findclose(hFile);
};
}
ListBox1->Items->Add(fdt.name); // archivos ListBox1->Items->Add(Dir); // Directorios. si puedes ayudarme seria estupendo, igual, si me sale el código, lo estare comentando por acá. Gracias y Saludos. ![]() |
|
#4
|
||||
|
||||
|
Hola darkmir.
Tratándose de tantos directorios y archivos, seguramente la profundidad (cantidad de carpetas/subcarpetas hasta el nodo) sea muy grande y por tanto las llamadas recursivas del algoritmo agoten la memoria destinada a la pila. Al usar try/catch evitas que se lance la excepción, pero lamentablemente no va a cumplir el cometido. En este caso creo que hay que descartar la solución recursiva... Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#5
|
|||
|
|||
|
Modificacion codigo.
Hola ecfisa,
estoy amoldando el codigo, pero me lanza un error en una parte, este es el codigo modificado: Código:
char *Dir = "F:\\" ;
struct _finddata_t arch;
long hFile;
char tmp[MAX_PATH];
chdir(Dir); //cambio al directorio actual
arch.attrib = _A_SUBDIR; //define si el atributo es un directorio
if( (hFile = _findfirst("*.*", &arch) ) != -1)
{
do{
if (arch.attrib == _A_SUBDIR)
{
if (strcmp(arch.name,".")!= 0 && strcmp(arch.name,"..") != 0)
{
strcpy(tmp, Dir);
strcat(tmp, "\\");
strcat(tmp, arch.name);
}
}
else
ListBox1->Items->Add(String(arch.name));
} while (_findnext(hFile, &arch) == 0);
_findclose(hFile);
};
Saludos. ![]() |
|
#6
|
||||
|
||||
|
Cita:
En ese caso estas omitiendo la llamada recursiva por lo que el código va a tener una funcionalidad similar al de tu primer mensaje ( #1 ). Es decir, no va a recorrer el árbol de carpetas y subcarpetas listándote los archivos. Pero si incluís la línea que llama recursivamente a la función y la profundidad de la búsqueda es enorme provoca el desbordamiento de la pila, por este camino estas en un callejón sin salida. Lo que tenes que hacer es reformular el algoritmo para que funcione de forma iterativa. En este enlace tenes ejemplos búsqueda sobre un árbol binario de ámbos modos: Árbol binario de búsqueda Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#7
|
|||
|
|||
|
Gracias.
Hola ecfisa,
muy interesante lo de arboles y los ejemplo que estan en el link me estan sirviendo de ayuda, no sabia que existia ese metodo. gracias. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Obtener los nombres de las subcarpetas de una carpeta | ingabraham | Varios | 2 | 01-06-2013 06:49:24 |
| listar carpetas de un directorio? | gabrielflowers | PHP | 13 | 10-04-2008 00:25:22 |
| Es posible compartir carpetas por Internet utilizando compartir carpetas? | JuanErasmo | Windows | 5 | 12-02-2007 20:45:17 |
| listar archivos jpg dentro de una carpeta con subcarpetas | JuanErasmo | API de Windows | 6 | 06-12-2006 22:52:49 |
| Buscar archivos jpg en carpetas y subcarpetas!! | JuanErasmo | API de Windows | 4 | 23-11-2006 17:41:49 |
|