Foros del Web » Programación para mayores de 30 ;) » C/C++ »

¿Como obtener nombre de un directorio y su contenido?

Estas en el tema de ¿Como obtener nombre de un directorio y su contenido? en el foro de C/C++ en Foros del Web. Estoy trabajando en C++ desde Ubuntu, y para trabajar con directorios uso la librería dirent.h , no se si está es la más adecuada para ...
  #1 (permalink)  
Antiguo 13/09/2013, 16:27
 
Fecha de Ingreso: septiembre-2008
Ubicación: Valencia
Mensajes: 160
Antigüedad: 15 años, 7 meses
Puntos: 2
¿Como obtener nombre de un directorio y su contenido?

Estoy trabajando en C++ desde Ubuntu, y para trabajar con directorios uso la librería dirent.h , no se si está es la más adecuada para trabajar con directorios, pero es la que he encontrado para Ubuntu y el resto de SO Linux.

He encontrado que tiene una estructura dirent con un campo char llamado d_name, de todos los que hay en la librería he visto que es el único que es char, pero de el solo obtengo . (este mismo directorio), pero dos veces, en vez de .. para directorio anterior, y el resto de valores son espacios en blanco o caracteres extraños. Y sobre tener solo 3 archivos y ningún directorio me marca que hay 16.

¿Me estoy equivocando de librería? ¿O simplemente no la uso adecuadamente?
  #2 (permalink)  
Antiguo 13/09/2013, 18:39
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: ¿Como obtener nombre de un directorio y su contenido?

La librería está bien (si es para el uso de opendir, readdir, closedir), pero la cosa está, ¿cómo lo estás usando? ¿podrías poner algo del código?

Te dejo un ejemplo de uso.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <dirent.h>
  5. #include <errno.h>
  6.  
  7. #ifndef PATH_MAX
  8.   #define PATH_MAX 255
  9. #endif
  10.  
  11. int main (int argc, char *argv[])
  12. {
  13.   DIR * dir;
  14.   struct dirent *dirs;
  15.   char path[PATH_MAX];
  16.  
  17.   path[PATH_MAX] = '\0';
  18.  
  19.   if (argc == 1)
  20.   {
  21.     fprintf(
  22.       stderr,
  23.       "Sintaxis: %s path_directorio\n",
  24.       argv[0]
  25.     );
  26.    
  27.     return EXIT_FAILURE;
  28.   }
  29.  
  30.   strncpy(path, argv[1], PATH_MAX-1);
  31.  
  32.   dir = opendir(path);
  33.  
  34.   if (dir == NULL)
  35.   {
  36.     fprintf(
  37.       stderr,
  38.       "No se puede abrir «%s»: %s\n",
  39.       path,
  40.       strerror(errno)
  41.     );
  42.    
  43.     return EXIT_FAILURE;
  44.   }
  45.  
  46.   while (dirs = readdir(dir), dirs != NULL)
  47.   {
  48.     if (strncmp(dirs->d_name, ".", PATH_MAX) == 0) continue;
  49.     if (strncmp(dirs->d_name, "..", PATH_MAX) == 0) continue;
  50.    
  51.     puts(dirs->d_name);
  52.   }
  53.  
  54.   closedir(dir);
  55.  
  56.   return 0;
  57. }

Última edición por guzzano; 13/09/2013 a las 19:45
  #3 (permalink)  
Antiguo 14/09/2013, 16:12
 
Fecha de Ingreso: septiembre-2008
Ubicación: Valencia
Mensajes: 160
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: ¿Como obtener nombre de un directorio y su contenido?

Básicamente uso un código como este:

Código:
#include <iostream>
#include <stdlib.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>

using namespace std;

int main()
{
	DIR *ID_Directorio;
	dirent *Directorio;
	ID_Directorio = opendir(".");
	
	Directorio = readdir(ID_Directorio);
	for(int i = 0; i < Directorio->d_reclen; i++)
			cout << Directorio->d_name[i] << "\n";
	return 0;
}
Es solo para ir probando, ya que es la primera vez que uso esta librería, y se me ocurren algunas aplicaciones donde puedo utilizarla, pero primero quiero aprender a usarla bien y que me puede dar exactamente.
  #4 (permalink)  
Antiguo 14/09/2013, 18:53
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 8 meses
Puntos: 13
Respuesta: ¿Como obtener nombre de un directorio y su contenido?

Cita:
Iniciado por Oracles Ver Mensaje
Básicamente uso un código como este:

Código:
#include <iostream>
#include <stdlib.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>

using namespace std;

int main()
{
	DIR *ID_Directorio;
	dirent *Directorio;
	ID_Directorio = opendir(".");
	
	Directorio = readdir(ID_Directorio);
	for(int i = 0; i < Directorio->d_reclen; i++)
			cout << Directorio->d_name[i] << "\n";
	return 0;
}
Es solo para ir probando, ya que es la primera vez que uso esta librería, y se me ocurren algunas aplicaciones donde puedo utilizarla, pero primero quiero aprender a usarla bien y que me puede dar exactamente.
Creo que aún no conoces el uso de la estructura dirent.h te dejo esta referencia que te va a servir bastante.

http://www.gnu.org/software/libc/man...ng-Directories

Como ayuda, d_name no es un arreglo de cadenas, y d_reclen no devuelve el número de archivos en el directorio. Examina el código que te puse arriba, readdir va a leer archivo por archivo, no va a guardar todo en la estructura. Por eso, se tiene que meter en un while.

Código C:
Ver original
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <dirent.h>
  4. #include <unistd.h>
  5. #include <sys/types.h>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.     DIR *ID_Directorio;
  12.     dirent *Directorio;
  13.     ID_Directorio = opendir(".");
  14.    
  15.     while ((Directorio = readdir(ID_Directorio)) != NULL)
  16.       cout << Directorio->d_name << "\n";
  17.    
  18.     return 0;
  19. }

Saludos.
  #5 (permalink)  
Antiguo 15/09/2013, 04:16
 
Fecha de Ingreso: septiembre-2008
Ubicación: Valencia
Mensajes: 160
Antigüedad: 15 años, 7 meses
Puntos: 2
Respuesta: ¿Como obtener nombre de un directorio y su contenido?

La verdad es esa, que no se muy bien como funciona, busqué por ahí cuales eran los campos de la estructura, y los métodos y atributos de la clase, pero solo encontré lo de la estructura, y aprendo probando, de ahí el "programita" chorra. Y lo poco que encontré de la librería no me quedó muy claro.

Gracias por el link, veré si con todo eso aprendo bien como funciona y como utilizarla. En otros lenguajes tengo claro como funciona como en PHP, pero C/C++ trabajar con directorios no lo he hecho nunca.

Etiquetas: directorio, nombre, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:48.