Listar directorio en c

Iniciado por DrKillador, 6 Febrero 2013, 13:53 PM

0 Miembros y 1 Visitante están viendo este tema.

DrKillador

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
Python <3 Python

0xDani

Ejemplo usando POSIX:


#include <dirent.h>
#include <stdio.h>

int main()
{
DIR *d = opendir(".");
struct dirent *dentry;
size_t i=1;

while((dentry=readdir(d)!=NULL))
{
  printf("%u. %s\n", i, dentry->d_name);
}

return 0;
}


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.
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

Gracias! Se me olvido ponerlo, sorry bro, es para windows  :rolleyes:
Python <3 Python


amchacon

#4
Código (cpp) [Seleccionar]
void listarDirectorio(string Cosa)
{
   // Variables del sistema

   WIN32_FIND_DATA findFileData;
   HANDLE          hFind;

   // Iniciamos la busqueda y le pasamos un valor a nuestro Handle

   hFind = FindFirstFile(Cosa.c_str(), &findFileData);

   // Si no existe la carpeta

   if (hFind == INVALID_HANDLE_VALUE)
   {
       std::cout << "La carpeta no existe o no se puede acceder";
   }

   else
   {
       // Si existe, pasamos al siguiente fichero (el primero solo contiene basura)

       FindNextFile(hFind, &findFileData);

       // Listamos todos los ficheros restantes

       while (FindNextFile(hFind, &findFileData) != 0)
       {
           Buffer = Cosa; // Creamos una variable de nombre con el valor del directorio
           Buffer.erase(Buffer.size()-1); // Borramos el asterisco
           Buffer += findFileData.cFileName;

           if (GetFileAttributes(Buffer.c_str()) == FILE_ATTRIBUTE_DIRECTORY)
           {
               Buffer += "\\*";
               listarDirectorio(Buffer);
           }
           else
           {
               std::cout<<Buffer<<endl;
           }
       }
   }
}


Es importante que le pases a la función la ruta "*" para que te marque la carpeta actual.
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

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:

listarDirectorio(Buffer,Nuevo);
void listarDirectorio(string Cosa)

¿Está bien así?
Python <3 Python

DrKillador

#6
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

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <tchar.h>

int main()
{
   WIN32_FIND_DATA findFileData;
   HANDLE hFind;

   hFind = FindFirstFile(".", &findFileData);

   if(hFind==INVALID_HANDLE_VALUE)
   {
       printf("La carpeta no existe o no se puede acceder");
   }
   else
   {
       do
       {
           if(findFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
           {
               printf("Dir %s",findFileData.cFileName);
           }
           else
           {
               printf("%s\n",findFileData.cFileName);
           }
       }while(FindNextFile(hFind,&findFileData)!=0);

       FindClose(hFind);
   }

   return 0;
}
Python <3 Python

amchacon

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.
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

Arreglado, era el * efectivamente. Ya podéis cerrar el hilo, muchas gracias!
Python <3 Python

amchacon

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).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar