SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: rreennee en Martes 22 de Abril de 2008, 22:57

Título: Búsqueda De Archivos En C++
Publicado por: rreennee en Martes 22 de Abril de 2008, 22:57
Hola

Soy principiante en la
programacion con lenguaje C++.
Necesito que alguien me explique
como se usan las funciones _findfirst y _findnext
 :unsure:

De antemano gracias.
Título: Re: Búsqueda De Archivos En C++
Publicado por: Eternal Idol en Martes 22 de Abril de 2008, 23:45
Primero y principal estas funciones NO son standard (ni de C ni de C++).

Primero llamas a _findfirst pasandole el lugar y la forma en que queres buscar como por ejemplo "C:\\WINDOWS\\*". Si esta funcion retorna diferente a -1 quiere decir que funciono y por logica en el campo name de la estructura _finddata_t que hayas pasado va a haber un "." (la primera entrada de cualquier directorio. Despues en un bucle llamas a _findnext usando el valor devuelto por _findfirst (ese que no tiene que ser -1). Cada vez que lo llames y retorne 0 quiere decir que hay un nuevo archivo o directorio.

Proba y lee la documentacion:
_findfirst (http://msdn2.microsoft.com/en-us/library/zyzxfzac(VS.80).aspx)
_findnext (http://msdn2.microsoft.com/en-us/library/6tkkkc1y(VS.80).aspx)
_finddata_t (http://msdn2.microsoft.com/en-us/library/kda16keh(VS.80).aspx)
Título: Re: Búsqueda De Archivos En C++
Publicado por: rreennee en Miércoles 23 de Abril de 2008, 00:32
Gracias Eternal Idol, me sirvió mucho tu ayuda.
Cómo puedo hacer para que el usuario me dé el archivo a buscar?
Porque si le pongo cin>> para ver que archivo buscar, al mandarlo como
parámetro en findfirst, se traba el programa


Al ejecutar el siguiente código, el programa se queda trabado

Código: Text
  1. #include<string.h>
  2. #include<iostream>
  3. #include<cstdlib>
  4. #include<io.h>
  5. struct _finddata_t fileinfo;
  6. char *file="file.cpp"; //>>>Si le pongo un valor inicial si lo busca
  7. //pero si le pongo un cin para que el usuario introduzca el archivo a buscar
  8. //o strcpy(file,"directorios.cpp");     el programa se traba
  9. int hay_archivos;
  10. main()
  11. {
  12.       _findfirst(file,&fileinfo);
  13.       cout<<"Archivo: "<<fileinfo.name;
  14.       cout<<"Tamaño: "<<fileinfo.size;
  15. system("PAUSE");
  16. }
  17.  
Título: Re: Búsqueda De Archivos En C++
Publicado por: ProfesorX en Miércoles 23 de Abril de 2008, 03:35
El problema es esta linea:
Código: Text
  1.  
  2. char *file="file.cpp"
  3.  
  4.  

utilizas file como un apuntador a char, pero no le asignas espacio en memoria. En la inicializacion que utilizas, no hay problema, porque la variable apunta a una cadena constante, pero si tratas de cambiarla, es probable que sobrescribas parte de la memoria, y por lo tanto se corrompe y por eso se "traba".

La solucion es que utilices un array de caracteres, o si te decides a seguir usando apuntadores, debes utilizar new/delete.

Código: Text
  1.  
  2. /// Utilizas un array de caracteres
  3. char file[30];
  4.  
  5.  

Código: Text
  1.  
  2. /// Utilizas apuntadores/memoria dinamica
  3. char* file;
  4.  
  5. file = new char[30];
  6.  
  7. /// Debes usar delete cuando ya no quieras usar la memoria
  8. delete file;
  9.  
  10.  

Saludos :hola: