Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MeCraniDOS en 22 Junio 2013, 19:16 pm



Título: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 22 Junio 2013, 19:16 pm
Buenas, tengo este código...

Código
  1. #include <stdio.h>
  2. #include <io.h>
  3.  
  4. int main()
  5. {
  6.    struct _finddata_t arch;
  7.    long result;
  8.    int n;
  9.  
  10.    if ( (result = _findfirst("*.txt", &arch)) == -1 )
  11.    {
  12.        printf("\n ~ No hay Archivos ~\n\n");
  13.    }
  14.    else
  15.    {
  16.  
  17.        printf("\n ~ Seleccion de Archivos ~\n\n");
  18.  
  19.        n = 1;
  20.  
  21.        do
  22.        {
  23.            printf(" %d.- %s\n", n, arch.name);
  24.            n+=1;
  25.  
  26.        } while ( _findnext(result, &arch) == 0 );
  27.  
  28.        _findclose(result);
  29.  
  30.  
  31.    }
  32.  
  33.    printf("\n Que archivo quieres abrir?");
  34.  
  35.    getchar();
  36.  
  37.  
  38. }

Quiero modificarlo de manera que en vez de escribir el nombre del archivo para abrirlo, solo ponga el numero que lleva delante, es decir, que ponga 1, y se abra el primer archivo..  :silbar:

Creo que se hace con <vector> pero no se como usarlo, espero que puedan ayudarme  ;-)

Saludos


Título: Re: [C++] Uso de <vector>
Publicado por: amchacon en 22 Junio 2013, 20:34 pm
Tú lo que quieres es algo parecido a mi Rar File Missing.

Consulta mi código, no obstante es bastante sencillo (vas guardando los nombres en un vector, después le pides al usuario un número y accedes a ese elemento del vector).


Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 22 Junio 2013, 20:37 pm
Tú lo que quieres es algo parecido a mi Rar File Missing.

Siii, es exactamente lo que quiero  :rolleyes: :rolleyes:

Mire tu código pero no te voy a decir la que lié...  :¬¬ :¬¬

No se como guardar lo nombres en un vector  :-\

Editado

He mirado tu codigo y se queda trabado en "Buscando archivos Rar en la carpeta..." :-\


Título: Re: [C++] Uso de <vector>
Publicado por: amchacon en 23 Junio 2013, 00:29 am
No se como guardar lo nombres en un vector  :-\
Pues si no sabemos ni siquiera usar un vector vamos mal  :silbar:

Mírate este vídeo:
http://www.youtube.com/watch?feature=player_embedded&v=ySZ60lvuoo4


Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 23 Junio 2013, 00:43 am
Pues si no sabemos ni siquiera usar un vector vamos mal  :silbar:

Ahora ya si que funciona, pero es lo que te digo, se me queda trabado en el "Buscando archivos Rar en la carpeta..." y no pasa de ahí...


Título: Re: [C++] Uso de <vector>
Publicado por: amchacon en 23 Junio 2013, 11:48 am
¿Pero no estabas usando archivos .txt?

Borra todo lo que tengas y vuelve al código inicial. Después mirate el vídeo que te pasé.


Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 23 Junio 2013, 14:13 pm
¿Pero no estabas usando archivos .txt?

En la función ExtensionRar, cambie el "rar" por "txt", ya lo adapte a lo que quería y no me daba fallos, pero como no funcionaba intente compilar tu proyecto, y también se quedaba trabado en esa linea, del tuyo no modifique nada...  :-\ :-\


Título: Re: [C++] Uso de <vector>
Publicado por: ecfisa en 23 Junio 2013, 22:11 pm
Hola MeCraniDOS.

Citar
Quiero modificarlo de manera que en vez de escribir el nombre del archivo para abrirlo, solo ponga el numero que lleva delante, es decir, que ponga 1, y se abra el primer archivo..  :silbar:

Creo que se hace con <vector> pero no se como usarlo, espero que puedan ayudarme  ;-)

Tal vez este código muy básico te pueda servir de guía:
Código
  1. #include<iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <windows.h>
  5.  
  6. using namespace std;
  7.  
  8. typedef vector <string> vFileNames;
  9.  
  10. bool GetFileNames(string , string , vFileNames*);
  11. void ShowFileNames(vFileNames);
  12.  
  13. int main()
  14. {
  15.  vFileNames FileNames;
  16.  string rta, ext;
  17.  int opt;
  18.  
  19.  cout << "Unidad + ruta (Ej: C:\\\\CARPETA\\\\): ";
  20.  cin >> rta;
  21.  cout << endl << "Extension del archivo (Ej: *.TXT): ";
  22.  cin >> ext;
  23.  if (GetFileNames(rta, ext, &FileNames))
  24.    do {
  25.      ShowFileNames(FileNames);
  26.      cout << "Seleccione un numero 0-" << FileNames.size()-1 <<" (-1 termina)";
  27.      cin >> opt;
  28.      if (opt > -1)
  29.      cout << endl << "Su eleccion: " << FileNames[opt] << endl << endl;
  30.    } while (opt != -1);
  31.  else
  32.    cout << "No se encontraron archivos";
  33.  return 0;
  34. }
  35.  
  36. bool GetFileNames(string Ruta, string Ext, vFileNames *v)
  37. {
  38.  WIN32_FIND_DATA FindFileData;
  39.  HANDLE hFind = FindFirstFile(((string)Ruta+Ext).c_str(), &FindFileData);
  40.  
  41.  if (hFind == INVALID_HANDLE_VALUE)
  42.    return false;
  43.  do
  44.    (*v).push_back(FindFileData.cFileName);
  45.  while (FindNextFile(hFind, &FindFileData));
  46.  FindClose(hFind);
  47.  return true;
  48. }
  49.  
  50. void ShowFileNames(vFileNames v) {
  51.  for(unsigned i = 0; i < v.size(); i++)
  52.    cout << i << ".- " << v[i] << endl;
  53. }
  54.  


Saludos :)


Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 24 Junio 2013, 22:59 pm
Tal vez este código muy básico te pueda servir de guía:

Si, me sirve de mucho, gracias por molestarte  ;-) ;-)

Saludos


Editado

Otra cosa, he adaptado tu código a lo que necesitaba, me ha quedado algo así


Código
  1. bool Listar_Archivos()
  2. {
  3.  
  4.    vFileNames FileNames;
  5.    string rta, ext;
  6.    int opt;
  7.  
  8.    rta = "";
  9.  
  10.    ext = "*.txt";
  11.  
  12.    if (GetFileNames(rta, ext, &FileNames))
  13.    {
  14.        ShowFileNames(FileNames);
  15.  
  16.        cout << "\n Selecciona un archivo (0-" << FileNames.size()-1 << ") ";
  17.  
  18.        cin >> opt;
  19.  
  20.        cout << endl << " Procesando " << FileNames[opt] << endl;
  21.  
  22.        return true;
  23.  
  24.    }
  25.  
  26.    else
  27.  
  28.    {
  29.        return false;
  30.    }
  31.  
  32. }

Pero tengo este problema, tengo este otro código

Código
  1.  
  2. #include <iostream>
  3. #include <fstream>
  4. #include <string>
  5. #include <cctype>
  6. #include <io.h>
  7. #include <vector>
  8.  
  9. #include <windows.h>
  10.  
  11.  
  12. using namespace std;
  13.  
  14.  
  15. typedef vector <string> vFileNames;
  16.  
  17. bool GetFileNames(string , string , vFileNames*);
  18. void ShowFileNames(vFileNames);
  19.  
  20. bool Listar_Archivos();
  21. bool Leer_Archivo(string Nombre);
  22.  
  23. int main()
  24. {
  25.        char Letra;
  26.        string Nombre_Archivo_Vacio; //Variable para el archivo a leer
  27.  
  28. if (!Listar_Archivos())
  29.       {
  30. cout<<" No se encontraron archivos!";
  31. cin.get(); // Pausa
  32. return -1; // Finaliza el programa con error
  33. }
  34.  
  35. if(!Leer_Archivo(Nombre_Archivo_Vacio)) //Se envia la variable "Nombre_Archivo_Vacio" a la funcion "Leer_Archivo"
  36.               {
  37.                         printf("\n [+] Desea intentar repetir la operacion? (S/N) ");
  38.                         cin>>Letra;
  39.               }
  40.  
  41.      [...]
  42. }

Lo que quiero es usar el archivo seleccionado de la función Listar_Archivos en la función Leer_Archivo, pero no se como pasar ese dato de una función a otra :-\ :-\

Saludos



Título: Re: [C++] Uso de <vector>
Publicado por: amchacon en 25 Junio 2013, 15:57 pm
Lo que quiero es usar el archivo seleccionado de la función Listar_Archivos en la función Leer_Archivo, pero no se como pasar ese dato de una función a otra :-\ :-\

Saludos


Simplemente pasa ese nombre:

Código
  1. cout << endl << " Procesando " << FileNames[opt] << endl;


Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 25 Junio 2013, 16:15 pm
Simplemente pasa ese nombre:

Código
  1. cout << endl << " Procesando " << FileNames[opt] << endl;

El problema es que no se como pasarlo TT

Si alguien me puede decir como hacerlo..  :-\ :-\


Título: Re: [C++] Uso de <vector>
Publicado por: ecfisa en 25 Junio 2013, 19:28 pm
Hola MeCraniDOS.

A ver si en líneas generales entendí lo que buscas...

Código
  1. #include<iostream>
  2. #include<fstream>
  3. #include <vector>
  4. #include <string>
  5. #include <windows.h>
  6.  
  7. using namespace std;
  8.  
  9. typedef vector <string> vFileNames;
  10.  
  11. bool GetFileNames(string Ruta, string Ext, vFileNames &v);
  12. void ShowFileNames(vFileNames v);
  13. string Listar_Archivos();
  14. void Leer_Archivo(string aFileName);
  15.  
  16. int main()
  17. {
  18.  char Letra = 'S';
  19.  string Nombre_Archivo; //Variable para el archivo a leer
  20.  
  21.  while (Letra == 'S') {
  22.    Nombre_Archivo = Listar_Archivos();
  23.    if (Nombre_Archivo.empty()) {
  24.      cout<<" No se encontraron archivos!";
  25.      cin.get(); // Pausa
  26.      return -1; // Finaliza el programa con error
  27.    }
  28.    Leer_Archivo(Nombre_Archivo);
  29.    cout <<"Desea intentar repetir la operacion? (S/N)";
  30.    cin >> Letra;
  31.  }
  32. }
  33.  
  34. bool GetFileNames(string Ruta, string Ext, vFileNames &v)
  35. {
  36. WIN32_FIND_DATA FindFileData;
  37. HANDLE hFind = FindFirstFile(((string)Ruta+Ext).c_str(), &FindFileData);
  38.  
  39. if (hFind == INVALID_HANDLE_VALUE)
  40.   return false;
  41. do
  42.   v.push_back(Ruta+FindFileData.cFileName);
  43. while (FindNextFile(hFind, &FindFileData));
  44. FindClose(hFind);
  45. return true;
  46. }
  47.  
  48. void ShowFileNames(vFileNames v)
  49. {
  50. for(unsigned i = 0; i < v.size(); i++)
  51.   cout << i << ".- " << v[i] << endl;
  52. }
  53.  
  54. string Listar_Archivos()
  55. {
  56.  vFileNames FileNames;
  57.  string rta= "C:\\", ext="*.txt";
  58.  int opt;
  59.  
  60.  if (GetFileNames(rta, ext, FileNames)) {
  61.    ShowFileNames(FileNames);
  62.    cout << "\n Selecciona un archivo (0-" << FileNames.size()-1 << ") ";
  63.    cin >> opt;
  64.    cout << endl << " Procesando " << FileNames[opt] << endl;
  65.    return FileNames[opt];
  66.  } else
  67.    return "";
  68. }
  69.  
  70. void Leer_Archivo(string aFileName)
  71. {
  72.  string line;
  73.  ifstream arch(aFileName.c_str(), ifstream::in);
  74.  if (arch.is_open())  {
  75.    while (arch.good()) {
  76.      getline (arch,line);
  77.      cout << line << endl;
  78.    }
  79.    arch.close();
  80.  }
  81. }
  82.  

Saludos :)


Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 26 Junio 2013, 11:09 am
A ver si en líneas generales entendí lo que buscas...

Listo, perfecto, gracias por la ayuda  ;-) ;-)