FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Error encontrado
Hola ecfisa,
Encontre el error del cual no funcionaba la recursividad para lisar archivos, no es por la profundidad (cantidad de carpetas/subcarpetas hasta el nodo) que sea muy grande, ni que se agote la memoria destinada a la pila, es solo con los nombes de las carpetas. La recursividad esta bien, me lista todos los archivos, lo probe con discos duros de 1 TB , el cual estaba lleno con 870 GB, y me los listo normal, pero si encuentra una carpeta con un nombre extenso , se cuelga y es en donde ya no funciona el programa. Un ejemplo de nombre de carpeta el cual no lee es "F:\\Theme Patcher if not ever made the patches you here" , al llegar a leer una carpeta asi, se forma un bucle infinito y es ahí donde se agota toda la memoria, pero en base al nombre de la carpeta, sino funcionaria normal, dejo la imagen del error: Pude arreglarlo con un try{}catch(...){} por el momento, si puedo omitir ese error por otro método lo posteare para mejorar el código. Saludos. |
#2
|
||||
|
||||
Yo no le veo nada raro al código para que de un error con nombres largos. La Constante MAX_PATH debe valer 260. Los nombres más largos admitidos por NTFS es de 256 incluido todo el PATH, quizás el error viene por este lado.
Yo suelo usar sin problemas funciones recursivas para listar archivos como la que publiqué aquí hace unos años. Saludos. |
#3
|
|||
|
|||
Gracias por el apoyo
Cita:
el código que me mandaste, me funciono perfectamente, ya no tuve problemas de cuelgue, bueno creo que este tema con las soluciones brindadas, ya esta solucionado. Saludos y gracias. |
#4
|
||||
|
||||
Hola.
Me quedó la duda del por qué del error, y según parece lo causa la función ChDir que es la diferencia significativa entre el código de escafandra que funciona correctamente y la segunda opción que te sugerí en el mensaje #2 que da el error. Pero ignoro por qué causa lo provoca, me imagino que no está preparada para soportar los nuevos nombres... Para sumar opciones, otro modo es: Código:
void ListFiles(String folder, TStrings *TS) { WIN32_FIND_DATA wfd; HANDLE hFind; DWORD ERR; hFind = FindFirstFile(String(folder + "\\*.*").c_str(), &wfd); if (hFind != INVALID_HANDLE_VALUE) { do { if (String(wfd.cFileName) != "." && String(wfd.cFileName) != "..") { if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ListFiles(String(folder+"\\"+wfd.cFileName), TS); else TS->Add(String(folder+"\\"+wfd.cFileName)); } } while(FindNextFile(hFind, &wfd)); FindClose(&wfd); } } Código:
void __fastcall TForm1::Button1Click(TObject *Sender) { ListFiles("C:\\Windows", ListBox1->Items); }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 07-12-2013 a las 14:33:41. Razón: Agregar código |
#5
|
|||
|
|||
Cita:
probe el código pero me manda este error , al escanear cualquier unidad: algo que ver con la memoria, quizás? Saludos. |
#6
|
||||
|
||||
Hola darkmir.
Probé el código varias veces anteriormente y nuevamente ahora, esta vez copiando y pegándolo desde el mensaje para descartar cualquier error de transcripción, sigue funcionando sin errores. Inclusive, a fines de prueba, cree un archivo con el nombre que mencionaste te daba error: "Theme Patcher if not ever made the patches you here" y también otros con los nombres más rebuscados que se me ocurrieron. No sé que te puede estar sucediendo y sobre los datos que dispongo no logro reproducir el error... Lo único que se me ocurre es que copies y pegues exáctamente el código que estas usando para poder revisarlo. Saludos
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
|||
|
|||
Error
Hola ecfisa,
el código que estoy utilizando es este: Código:
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void ListFiles(String folder, TStrings *TS) { WIN32_FIND_DATA wfd; HANDLE hFind; DWORD ERR; hFind = FindFirstFile(String(folder + "\\*.*").c_str(), &wfd); if (hFind != INVALID_HANDLE_VALUE) { do { if (String(wfd.cFileName) != "." && String(wfd.cFileName) != "..") { if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ListFiles(String(folder+"\\"+wfd.cFileName), TS); else TS->Add(String(folder+"\\"+wfd.cFileName)); } } while(FindNextFile(hFind, &wfd)); FindClose(&wfd); } } void __fastcall TForm1::Button1Click(TObject *Sender) { ListFiles("E:\\", ListBox1->Items); } - version trial del Embarcadero c++ XE5. - windows 7 64 bits. quizás sea la version en la que se compila y ejecuta. Saludos. |
|
|
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 |
|