[C++] Uso de <vector>

Iniciado por MeCraniDOS, 22 Junio 2013, 19:16 PM

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

MeCraniDOS

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
"La física es el sistema operativo del Universo"
     -- Steven R Garman

amchacon

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

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

MeCraniDOS

#2
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..." :-\
"La física es el sistema operativo del Universo"
     -- Steven R Garman

amchacon

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

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

MeCraniDOS

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í...
"La física es el sistema operativo del Universo"
     -- Steven R Garman

amchacon

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

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

MeCraniDOS

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...  :-\ :-\
"La física es el sistema operativo del Universo"
     -- Steven R Garman

ecfisa

#7
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 :)

MeCraniDOS

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

"La física es el sistema operativo del Universo"
     -- Steven R Garman

amchacon

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

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar