Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-12-2013
darkmir darkmir is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 28
Poder: 0
darkmir Va por buen camino
Gracias por el apoyo

Cita:
Empezado por escafandra Ver Mensaje
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.
gracias escafandra,

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.
Responder Con Cita
  #2  
Antiguo 07-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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.

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);
  }
}
Llamada:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ListFiles("C:\\Windows", ListBox1->Items);
}
Saludos
__________________
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
Responder Con Cita
  #3  
Antiguo 08-12-2013
darkmir darkmir is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 28
Poder: 0
darkmir Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
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);
  }
}
Llamada:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ListFiles("C:\\Windows", ListBox1->Items);
}
Saludos
Hola ecfisa,

probe el código pero me manda este error , al escanear cualquier unidad:



algo que ver con la memoria, quizás?

Saludos.
Responder Con Cita
  #4  
Antiguo 08-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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.

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 ....
Responder Con Cita
  #5  
Antiguo 08-12-2013
darkmir darkmir is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 28
Poder: 0
darkmir Va por buen camino
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);
}
porseacaso te mando estos datos:
- version trial del Embarcadero c++ XE5.
- windows 7 64 bits.

quizás sea la version en la que se compila y ejecuta.

Saludos.
Responder Con Cita
  #6  
Antiguo 08-12-2013
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 14
aguml Va por buen camino
a mi me ha pasado algo similar por ejemplo al aparecer caracteres especiales en el nombrel yo lo solucione combirtiendo el nombre en su nombre corto y luego uso su nombre corto para trabajar aunque sigas mostrando el largo. Tambien me han pasado errores similares cuando el nombre empezaba con un espacio. Si te fijas en el nombre del directorio te aparecen dos signos de interrogacion lo cual me da que pensar que en el nombre hay caracteres que no se pueden interpretar. Yo probaria a modificar el nombre del directorio escribiendolo a mano y poniendole el mismo pero repito, a mano ya que un copy paste lo dejaria igual.
Responder Con Cita
  #7  
Antiguo 09-12-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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.

Probé el código que publicaste y funciona correctamente.
Seguramente como comentas en tu último mensaje, se trate de alguna diferencia en las versiones, yo estoy usando C++ Builder 6.

De todos modos la idea era sólo poner una opción mas, ya tenes la solución con el código que te sugirió el amigo escafandra.

Saludos
__________________
Daniel Didriksen

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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 11:35:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi