Test Foro de elhacker.net SMF 2.1

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 (cpp) [Seleccionar]
#include <stdio.h>
#include <io.h>

int main()
{
   struct _finddata_t arch;
   long result;
   int n;

   if ( (result = _findfirst("*.txt", &arch)) == -1 )
   {
       printf("\n ~ No hay Archivos ~\n\n");
   }
   else
   {

       printf("\n ~ Seleccion de Archivos ~\n\n");

       n = 1;

       do
       {
           printf(" %d.- %s\n", n, arch.name);
           n+=1;

       } while ( _findnext(result, &arch) == 0 );

       _findclose(result);


   }
   
   printf("\n Que archivo quieres abrir?");
   
   getchar();


}


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
Cita de: amchacon en 22 Junio 2013, 20:34 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
Cita de: MeCraniDOS en 22 Junio 2013, 20:37 PMNo 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
Cita de: amchacon en 23 Junio 2013, 00:29 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
Cita de: amchacon en 23 Junio 2013, 11:48 AM
¿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 (cpp) [Seleccionar]

#include<iostream>
#include <vector>
#include <string>
#include <windows.h>

using namespace std;

typedef vector <string> vFileNames;

bool GetFileNames(string , string , vFileNames*);
void ShowFileNames(vFileNames);

int main()
{
 vFileNames FileNames;
 string rta, ext;
 int opt;

 cout << "Unidad + ruta (Ej: C:\\\\CARPETA\\\\): ";
 cin >> rta;
 cout << endl << "Extension del archivo (Ej: *.TXT): ";
 cin >> ext;
 if (GetFileNames(rta, ext, &FileNames))
   do {
     ShowFileNames(FileNames);
     cout << "Seleccione un numero 0-" << FileNames.size()-1 <<" (-1 termina)";
     cin >> opt;
     if (opt > -1)
     cout << endl << "Su eleccion: " << FileNames[opt] << endl << endl;
   } while (opt != -1);
 else
   cout << "No se encontraron archivos";
 return 0;
}

bool GetFileNames(string Ruta, string Ext, vFileNames *v)
{
 WIN32_FIND_DATA FindFileData;
 HANDLE hFind = FindFirstFile(((string)Ruta+Ext).c_str(), &FindFileData);

 if (hFind == INVALID_HANDLE_VALUE)
   return false;
 do
   (*v).push_back(FindFileData.cFileName);
 while (FindNextFile(hFind, &FindFileData));
 FindClose(hFind);
 return true;
}

void ShowFileNames(vFileNames v) {
 for(unsigned i = 0; i < v.size(); i++)
   cout << i << ".- " << v[i] << endl;
}



Saludos :)
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 24 Junio 2013, 22:59 PM
Cita de: ecfisa en 23 Junio 2013, 22:11 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 (cpp) [Seleccionar]
bool Listar_Archivos()
{

   vFileNames FileNames;
   string rta, ext;
   int opt;

   rta = "";

   ext = "*.txt";

   if (GetFileNames(rta, ext, &FileNames))
   {
       ShowFileNames(FileNames);

       cout << "\n Selecciona un archivo (0-" << FileNames.size()-1 << ") ";

       cin >> opt;

       cout << endl << " Procesando " << FileNames[opt] << endl;

       return true;

   }

   else

   {
       return false;
   }

}


Pero tengo este problema, tengo este otro código

Código (cpp) [Seleccionar]


#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
#include <io.h>
#include <vector>

#include <windows.h>


using namespace std;


typedef vector <string> vFileNames;

bool GetFileNames(string , string , vFileNames*);
void ShowFileNames(vFileNames);

bool Listar_Archivos();
bool Leer_Archivo(string Nombre);

int main()
{
       char Letra;
       string Nombre_Archivo_Vacio; //Variable para el archivo a leer
   
if (!Listar_Archivos())
      {
cout<<" No se encontraron archivos!";
cin.get(); // Pausa
return -1; // Finaliza el programa con error
}

if(!Leer_Archivo(Nombre_Archivo_Vacio)) //Se envia la variable "Nombre_Archivo_Vacio" a la funcion "Leer_Archivo"
              {
                        printf("\n [+] Desea intentar repetir la operacion? (S/N) ");
                        cin>>Letra;
              }

     [...]
}


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
Cita de: MeCraniDOS en 24 Junio 2013, 22:59 PMLo 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 (cpp) [Seleccionar]
cout << endl << " Procesando " << FileNames[opt] << endl;
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 25 Junio 2013, 16:15 PM
Cita de: amchacon en 25 Junio 2013, 15:57 PM
Simplemente pasa ese nombre:

Código (cpp) [Seleccionar]
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 (cpp) [Seleccionar]

#include<iostream>
#include<fstream>
#include <vector>
#include <string>
#include <windows.h>

using namespace std;

typedef vector <string> vFileNames;

bool GetFileNames(string Ruta, string Ext, vFileNames &v);
void ShowFileNames(vFileNames v);
string Listar_Archivos();
void Leer_Archivo(string aFileName);

int main()
{
  char Letra = 'S';
  string Nombre_Archivo; //Variable para el archivo a leer

  while (Letra == 'S') {
    Nombre_Archivo = Listar_Archivos();
    if (Nombre_Archivo.empty()) {
      cout<<" No se encontraron archivos!";
      cin.get(); // Pausa
      return -1; // Finaliza el programa con error
    }
    Leer_Archivo(Nombre_Archivo);
    cout <<"Desea intentar repetir la operacion? (S/N)";
    cin >> Letra;
  }
}

bool GetFileNames(string Ruta, string Ext, vFileNames &v)
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind = FindFirstFile(((string)Ruta+Ext).c_str(), &FindFileData);

if (hFind == INVALID_HANDLE_VALUE)
   return false;
do
   v.push_back(Ruta+FindFileData.cFileName);
while (FindNextFile(hFind, &FindFileData));
FindClose(hFind);
return true;
}

void ShowFileNames(vFileNames v)
{
for(unsigned i = 0; i < v.size(); i++)
   cout << i << ".- " << v[i] << endl;
}

string Listar_Archivos()
{
  vFileNames FileNames;
  string rta= "C:\\", ext="*.txt";
  int opt;

  if (GetFileNames(rta, ext, FileNames)) {
    ShowFileNames(FileNames);
    cout << "\n Selecciona un archivo (0-" << FileNames.size()-1 << ") ";
    cin >> opt;
    cout << endl << " Procesando " << FileNames[opt] << endl;
    return FileNames[opt];
  } else
    return "";
}

void Leer_Archivo(string aFileName)
{
  string line;
  ifstream arch(aFileName.c_str(), ifstream::in);
  if (arch.is_open())  {
    while (arch.good()) {
      getline (arch,line);
      cout << line << endl;
    }
    arch.close();
  }
}


Saludos :)
Título: Re: [C++] Uso de <vector>
Publicado por: MeCraniDOS en 26 Junio 2013, 11:09 AM
Cita de: ecfisa en 25 Junio 2013, 19:28 PM
A ver si en líneas generales entendí lo que buscas...

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