elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Listar directorio en c
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Listar directorio en c  (Leído 13,418 veces)
DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Listar directorio en c
« en: 6 Febrero 2013, 13:53 pm »

Hola amigos,

Saben como puedo hacer para listar un dir en C? y devolver una list con los archivos y subcarpetas que contenga el directorio?

Graxx  :D


En línea

Python <3 Python
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Listar directorio en c
« Respuesta #1 en: 6 Febrero 2013, 14:25 pm »

Ejemplo usando POSIX:

Código
  1. #include <dirent.h>
  2. #include <stdio.h>
  3.  
  4. int main()
  5. {
  6. DIR *d = opendir(".");
  7. struct dirent *dentry;
  8. size_t i=1;
  9.  
  10. while((dentry=readdir(d)!=NULL))
  11. {
  12.  printf("%u. %s\n", i, dentry->d_name);
  13. }
  14.  
  15. return 0;
  16. }
  17.  

No lo he probado, pero creo que funcionara. Este ejemplo debe listar los archivos y directorios del directorio actual (".").

Si es para windows no te puedo ayudar.

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Listar directorio en c
« Respuesta #2 en: 6 Febrero 2013, 14:29 pm »

Gracias! Se me olvido ponerlo, sorry bro, es para windows  :rolleyes:
En línea

Python <3 Python
Lambda


Desconectado Desconectado

Mensajes: 371



Ver Perfil WWW
Re: Listar directorio en c
« Respuesta #3 en: 6 Febrero 2013, 14:30 pm »

http://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364428(v=vs.85).aspx

Con esas 2 funciones tienes para empezar
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Listar directorio en c
« Respuesta #4 en: 6 Febrero 2013, 15:38 pm »

Código
  1. void listarDirectorio(string Cosa)
  2. {
  3.    // Variables del sistema
  4.  
  5.    WIN32_FIND_DATA findFileData;
  6.    HANDLE          hFind;
  7.  
  8.    // Iniciamos la busqueda y le pasamos un valor a nuestro Handle
  9.  
  10.    hFind = FindFirstFile(Cosa.c_str(), &findFileData);
  11.  
  12.    // Si no existe la carpeta
  13.  
  14.    if (hFind == INVALID_HANDLE_VALUE)
  15.    {
  16.        std::cout << "La carpeta no existe o no se puede acceder";
  17.    }
  18.  
  19.    else
  20.    {
  21.        // Si existe, pasamos al siguiente fichero (el primero solo contiene basura)
  22.  
  23.        FindNextFile(hFind, &findFileData);
  24.  
  25.        // Listamos todos los ficheros restantes
  26.  
  27.        while (FindNextFile(hFind, &findFileData) != 0)
  28.        {
  29.            Buffer = Cosa; // Creamos una variable de nombre con el valor del directorio
  30.            Buffer.erase(Buffer.size()-1); // Borramos el asterisco
  31.            Buffer += findFileData.cFileName;
  32.  
  33.            if (GetFileAttributes(Buffer.c_str()) == FILE_ATTRIBUTE_DIRECTORY)
  34.            {
  35.                Buffer += "\\*";
  36.                listarDirectorio(Buffer);
  37.            }
  38.            else
  39.            {
  40.                std::cout<<Buffer<<endl;
  41.            }
  42.        }
  43.    }
  44. }

Es importante que le pases a la función la ruta "*" para que te marque la carpeta actual.
« Última modificación: 24 Febrero 2013, 22:37 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Listar directorio en c
« Respuesta #5 en: 7 Febrero 2013, 08:35 am »

Gracias @amchacon, una pregunta del código, en el IF situado dentro del WHILE, si la sentencia es verdadera intenta hacer recursividad, llamando de nuevo a la función listarDirectorio, pero a esta función se le pasan 2 argumentos, cuando en realidad solo admite uno por cabecera:

Código:
listarDirectorio(Buffer,Nuevo);
Código:
void listarDirectorio(string Cosa)

¿Está bien así?
En línea

Python <3 Python
DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Listar directorio en c
« Respuesta #6 en: 7 Febrero 2013, 11:55 am »

A ver si me pueden ayudar, he programado el siguiente codigo para listar todos los archivos y subcarpetas de una carpeta, pero me muestra UN SOLO archivo de la carpeta, el primero concretamente.

Saben que me puede estar fallando? Gracias a to2

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4. #include <tchar.h>
  5.  
  6. int main()
  7. {
  8.    WIN32_FIND_DATA findFileData;
  9.    HANDLE hFind;
  10.  
  11.    hFind = FindFirstFile(".", &findFileData);
  12.  
  13.    if(hFind==INVALID_HANDLE_VALUE)
  14.    {
  15.        printf("La carpeta no existe o no se puede acceder");
  16.    }
  17.    else
  18.    {
  19.        do
  20.        {
  21.            if(findFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
  22.            {
  23.                printf("Dir %s",findFileData.cFileName);
  24.            }
  25.            else
  26.            {
  27.                printf("%s\n",findFileData.cFileName);
  28.            }
  29.        }while(FindNextFile(hFind,&findFileData)!=0);
  30.  
  31.        FindClose(hFind);
  32.    }
  33.  
  34.    return 0;
  35. }
« Última modificación: 7 Febrero 2013, 14:26 pm por DrKillador » En línea

Python <3 Python
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Listar directorio en c
« Respuesta #7 en: 7 Febrero 2013, 12:24 pm »

Culpa mia, he cometido dos fallos:


- Lo de poner la funcion recursiva con dos parametros.
- Es un * para listar el directorio actual y no un punto.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
DrKillador

Desconectado Desconectado

Mensajes: 56



Ver Perfil
Re: Listar directorio en c
« Respuesta #8 en: 7 Febrero 2013, 13:18 pm »

Arreglado, era el * efectivamente. Ya podéis cerrar el hilo, muchas gracias!
En línea

Python <3 Python
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Listar directorio en c
« Respuesta #9 en: 7 Febrero 2013, 14:43 pm »

Aclaro un poco lo de *

Hay que poner * para acceder al contenido de una carpeta, de lo contrario lo unico que accederemos es a la carpeta en sí (podríamos checkear sus propiedades, sus características... etc).
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Code: Listar los archivos de un directorio (subdirectorios incluidos)
Programación Visual Basic
EstoyBaneado 0 2,725 Último mensaje 25 Agosto 2005, 01:31 am
por EstoyBaneado
Listar un directorio ftp
Programación Visual Basic
programatrix 8 4,028 Último mensaje 30 Diciembre 2005, 13:32 pm
por programatrix
Listar usuarios de un directorio en windows xp
Windows
luur01 1 4,394 Último mensaje 22 Julio 2011, 18:36 pm
por Randomize
ls se bloquea al listar un directorio
GNU/Linux
{_The_Alwar_} 2 2,995 Último mensaje 29 Mayo 2012, 20:10 pm
por {_The_Alwar_}
Problema al listar directorio con File.list()
Java
AlterMundis 5 2,993 Último mensaje 29 Enero 2013, 21:32 pm
por AlterMundis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines