Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





obtener listado de carpetas con WIN32_FIND_DATA f en c++

Iniciado por xeex, 18 de Junio de 2009, 10:11:54 AM

« anterior - próximo »

xeex

Hola

cuando quiero obtener la lista de archivos, por ejemplo, de tipo .*txt en una carpeta llamada "modelos" hago lo siguiente:
                 
                  WIN32_FIND_DATA f;
                  HANDLE h = FindFirstFile("modelos./*txt", &f);
                  if(h != INVALID_HANDLE_VALUE)
                     {
                        do
                           {
                                 printf("ARCHIVOS TXT =%s\n",f.cFileName);
                           }while(FindNextFile(h, &f));
                     }

mi pregunta es que le debo poner como argumento a la funcion FindFirstFile() para que me de una lista de las carpetas que se encuentran dentro de la carpeta modelos. Es decir, ahora no quiero que me entregue un listado de algun determinado tipo de archivo, sino un listado de las carpetas.

por su ayuda, gracias
SALUDOS.

shephiroth

Me temo q en C++ tienes q hacer tu todo el trabajo sucio. Es decir, si quieres saber la lista de carpeta tienes q obtener TODOS los ficheros de la carpeta, y al recorrerlos comprobar si en sus atributos esta el atributo de directorio:
if (f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

Suerte ^^

xeex

gracias por la respuesta.
segui intentando y si, si se podia, habia que darle como argumento: "modelos/*"

WIN32_FIND_DATA f;
HANDLE h = FindFirstFile("modelos/*", &f);

lo unico malo es que las dos primeras posiciones te las llena con "." en la primera y ".." en la segunda(sin las comillas claro esta).
Bueno sabiendo esto basta solo con llamar a FindNextFile(h, &f); 2 veces y luego con las siguientes llamadas se obtendran la lista de las carpetas que se encuentren dentro de la carpeta modelo(en este caso), si es que las hay.

GRACIAS!!
y SALUDOS.

Pogacha

Nada mas queria agregar que esto es peligroso:
Cita de: shephiroth en 18 de Junio de 2009, 10:24:02 AM
if (f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

Dentro de lo posible hay que tratar de remplazarlo o bien por

if( (f.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0 )

o por:

#define TEST_MASK( x, v ) ( ((x)&v)!=0 )
if( TEST_MASK(f.dwFileAttributes, FILE_ATTRIBUTE_DIRECTORY) )

o por

template<class T> inline bool TestMask(const T& a, const T& b) { return (a&b)!=static_cast<T>(0); }
if( TestMask(f.dwFileAttributes, FILE_ATTRIBUTE_DIRECTORY)  )

Para este ultimo por supuesto que T tiene que tener definido mascara & y elemento neutro 0 o poder construirse desde un cast de 0. Igual no creo que se utilize con otra cosa que no sea unsigned int, shorts o chars.

Saludos






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.