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


 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Source] Listando directorios y archivos en C/C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Source] Listando directorios y archivos en C/C++  (Leído 25,706 veces)
~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
[Source] Listando directorios y archivos en C/C++
« en: 30 Mayo 2007, 15:09 »

Bueno, pues como veo que hay dudas respecto a esto en el foro (y yo necesitaba hacerlo tambien :xD) me e decidido a compartir con vosotros un sencillo codigo que lista directorios y carpetas con las apis FindFirstFile y FindNextFile.
Espero que os sea util ;)

ACTUALIZADO Y MEJORADO:
Código
  1. //////////////////////////////
  2. //  Listando directorios y  //
  3. //  carpetas de una ruta    //
  4. //  By E0N                  //
  5. //////////////////////////////
  6.  
  7. #include <iostream>
  8. #include <windows.h>
  9.  
  10. using namespace std;
  11.  
  12.  
  13. void listarDirectorio(char* dir)
  14. {
  15.    WIN32_FIND_DATA findFileData;
  16.    HANDLE          hFind;
  17.  
  18.    strcat (dir,"\\*");
  19.  
  20.    hFind = FindFirstFile(dir, &findFileData);
  21.  
  22.    if (hFind == INVALID_HANDLE_VALUE)
  23.    std::cout << "Ruta incorrecta";
  24.    else
  25.    {
  26. std::cout << findFileData.cFileName << '\n'; //El primer fichero
  27.  
  28.        // Listamos todos los ficheros restantes
  29.        while (FindNextFile(hFind, &findFileData) != 0)
  30. std::cout << findFileData.cFileName << '\n';
  31.    }
  32. }
  33.  
  34. void main()
  35. {
  36. char* dir = new char[MAX_PATH];
  37.  
  38.        cout << "Introduzca el nombre de la ruta a explorar: ";
  39.        cin  >> dir;
  40. cout << "\n\n";
  41.  
  42. listarDirectorio(dir);
  43.  
  44. delete(dir);
  45. }
  46.  


Código viejo:
#include <stdio.h>
#include <iostream>
#include <windows.h>

#define BUFSIZE MAX_PATH

void main()
{
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind = INVALID_HANDLE_VALUE;
   LPSTR Dir;
   Dir = (LPSTR) malloc (BUFSIZE);

   std::cout << "Introduzca el nombre de la ruta a explorar: ";
   std::cin >> Dir;
   
   strcat (Dir,"\\*"); //Le añadimos un \* al final de la ruta para que pueda listar los direcrorios bien

   hFind = FindFirstFile(Dir, &FindFileData);

   if (hFind == INVALID_HANDLE_VALUE)
   {
      std::cout << "Ruta incorrecta" << '\a';
   }
   else
   {
      std::cout << FindFileData.cFileName << '\n'; //El primer fichero
     
      // Listamos todos los ficheros del directorio
      while (FindNextFile(hFind, &FindFileData) != 0) //Mientras q la funcion q lista el siguiente fichero, es decir
                                                    //FindNextFile, no nos devuelva nulo...
      {
        std::cout << FindFileData.cFileName << '\n'; //...listamos el resto de ficheros y directorios
      }
   }
   free(Dir);
}


1S4ludo


« Última modificación: 18 Octubre 2008, 18:26 por E0N » En línea

Override

Desconectado Desconectado

Mensajes: 242



Ver Perfil WWW
Re: [Source] Listando directorios y archivos en C/C++
« Respuesta #1 en: 30 Mayo 2007, 18:01 »

Una duda namás :)

No acaso la libearia Iostream se usa en C++?
pero veo que usas C y aparte usas malloc, como comentario en Cpp ya no se usa malloc, se usa new[] y delete[] para crear heaps..
y también en C++  el uso de define ya es obsoleto se usa Const para las constantes...


No sé, se presta a confusiones, yo antes pensaba que por codear en VC++ estructuradamente codeaba en C++, pero era C, jeje, c++ como debes saber es hijo de C al cual se le agrega la POO (clases, herencia, polimorfismo, objetos, encapsulación, atributos, métodos blah blah)

Un saludo

pd: Nada más hago esta observacion, lo demás tú código estuvo bien


« Última modificación: 30 Mayo 2007, 18:16 por Override » En línea

~~
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.981


Ver Perfil WWW
Re: [Source] Listando directorios y archivos en C/C++
« Respuesta #2 en: 30 Mayo 2007, 18:27 »

Si  :xD :xD es por q malloc me resulta mas comodo q new  :xD :xD ademas e aprendido con google, nunca me han dado clases ni nada por el estilo, por lo q no te extrañe q haga mezclas de este estilo  :-(
En línea

Override

Desconectado Desconectado

Mensajes: 242



Ver Perfil WWW
Re: [Source] Listando directorios y archivos en C/C++
« Respuesta #3 en: 30 Mayo 2007, 19:02 »

Jajaja
Es gracioso, por que vamos a la inversa entonces, a ti te queda más fácil malloc?  a mí new :P

por otro lado tampoco he recibido clases "de programación".

Pero te recomiendo un buen libro: "Fundamentos De Programacion, Algoritmos, Estructuras De Datos Y O Bjetos - 3ª Ed."

Editorial McGrawHill

buscalo y un saludo
« Última modificación: 30 Mayo 2007, 19:05 por Override » En línea

Juan_Perez

Desconectado Desconectado

Mensajes: 148


Ver Perfil
Re: [Source] Listando directorios y archivos en C/C++
« Respuesta #4 en: 31 Mayo 2007, 13:27 »

Aquí les paso un ejemplo de una función recursiva en C++ que busca un archivo en una carpeta y todas sus subcarpetas.

Hice dos versiones, una para Windows y otra para GNU/Linux.
La versión para Windows la compilé con el Visual C++ .NET 2003 y el Dev C++ 4.9.9.2 bajo Windows XP pro SP2, y la de GNU/Linux con el g++ 4.1.2 bajo Ubuntu 6.0.

Probé ambos programas y aparentemente si encuentra las carpetas en donde se encuentra el archivo a buscar. Si lo prueban y encuentran errores les agradecería me los comentaran para corregirlos.

Versión Windows
Código:
#include <iostream>
#include <vector>
#include <string>

using namespace std;

#include <direct.h>
#include <io.h>

void FindFile (const string& archivo, const string& carpeta)
{
static struct _finddata_t c_file;
static long hFile;
static string filespec;

filespec = carpeta + "\\*.*";
if ((hFile = _findfirst (filespec.c_str(), &c_file )) == -1L )
return;

vector<string> carpetas;
do {
if ((c_file.attrib & _A_ARCH) != 0) { // no es un subdirectorio
if (c_file.name == archivo)
cout << '[' << carpeta << ']' << endl;
} else if ((c_file.attrib & _A_ARCH) == 0 && strcmp (c_file.name, ".") && strcmp (c_file.name, ".."))
carpetas.push_back (c_file.name);
} while (_findnext( hFile, &c_file ) == 0);
_findclose( hFile );

for (int i = 0; i < carpetas.size (); ++i)
FindFile (archivo, carpeta + "\\" + carpetas[i]);
}

int main(int argc, char* argv[])
{
   FindFile ("TimerSessionClient.java", "C:\\temp");
   return 0;
}
Versión GNU/Linux
Código:
#include <iostream>
#include <vector>
#include <string>

#include <stdlib.h>
#include <dirent.h>
#include <sys/stat.h>

using namespace std;

void FindFile (const string& archivo, const string& carpeta)
{
static DIR *dir;
static struct dirent *mi_dirent;

if( (dir = opendir (carpeta.c_str())) == NULL )
return;

vector<string> carpetas;
while ((mi_dirent = readdir (dir)) != NULL) {
if (string (mi_dirent->d_name) == "." || string (mi_dirent->d_name) == "..")
continue;
string cadina = carpeta + '/' + mi_dirent->d_name;
struct stat structura;
if (stat (cadina.c_str(), &structura) < 0)
;//cout << "error en stat" << endl;
else if (S_ISDIR (structura.st_mode))
carpetas.push_back (mi_dirent->d_name);
else if (archivo == mi_dirent->d_name)
cout << '[' << cadina << ']' << endl;
}
closedir (dir);

for (int i = 0; i < carpetas.size(); ++i)
FindFile (archivo, carpeta + '/' + carpetas[i]);
}

int main ( int argc, char *argv[] )
{
FindFile ("sony-sleep", "/etc");
return 0;
}
En línea

jhonder31

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: [Source] Listando directorios y archivos en C/C++
« Respuesta #5 en: 6 Agosto 2010, 08:01 »

amigos nesecito hacer este programa pero en C ansi porfa les ruego su ayuda, o almenos diganme en que lenguaje estan esos que ustedes hicieron porque lo he probado en c++, en visual c++ y en nungino me funciona me da un error de librerias, les agradeceria mucho su ayuda.
En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: [Source] Listando directorios y archivos en C/C++
« Respuesta #6 en: 6 Agosto 2010, 17:32 »

amigos nesecito hacer este programa pero en C ansi porfa les ruego su ayuda, o almenos diganme en que lenguaje estan esos que ustedes hicieron porque lo he probado en c++, en visual c++ y en nungino me funciona me da un error de librerias, les agradeceria mucho su ayuda.
Reemplazas los cout por printf y ya.

Bueno, pues como veo que hay dudas respecto a esto en el foro (y yo necesitaba hacerlo tambien :xD) me e decidido a compartir con vosotros un sencillo codigo que lista directorios y carpetas con las apis FindFirstFile y FindNextFile.
Espero que os sea util ;)
....

Excelente aporte, lo utilizare de inmediato  ;D
En línea

Eternal Idol
Moderador
***
Desconectado Desconectado

Mensajes: 5.642


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: [Source] Listando directorios y archivos en C/C++
« Respuesta #7 en: 6 Agosto 2010, 18:43 »

Si ven que un newbie levanta un hilo de hace años no le respondan por favor.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema listando proceso en win32
Programación C/C++
Uknow 3 1,438 Último mensaje 20 Noviembre 2011, 06:06
por naderST
Estructura de archivos y directorios XP
Windows
josepeet_4 2 2,316 Último mensaje 2 Diciembre 2011, 17:02
por josepeet_4
[APORTE] Interceptar Archivos/Directorios USB « 1 2 »
.NET (C#, VB.NET, ASP)
kub0x 16 5,918 Último mensaje 17 Abril 2012, 23:22
por kub0x
¿Por qué Windows tiene dos directorios de Archivos de programa y uno es x86?
Noticias
wolfbcn 0 1,135 Último mensaje 9 Junio 2015, 18:33
por wolfbcn
Problema listando archivos de un directorio C++
Programación C/C++
Kaxperday 0 718 Último mensaje 8 Diciembre 2015, 01:00
por Kaxperday
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines