Buenas, tengo este código...
#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ú 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).
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..." :-\
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
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í...
¿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é.
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... :-\ :-\
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:
#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 :)
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 ;-) ;-)
SaludosEditado
Otra cosa, he adaptado tu código a lo que necesitaba, me ha quedado algo así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
#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
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:
cout << endl << " Procesando " << FileNames[opt] << endl;
Cita de: amchacon en 25 Junio 2013, 15:57 PM
Simplemente pasa ese nombre:
cout << endl << " Procesando " << FileNames[opt] << endl;
El problema es que no se como pasarlo TT
Si alguien me puede decir como hacerlo.. :-\ :-\
Hola MeCraniDOS.
A ver si en líneas generales entendí lo que buscas...
#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 :)
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 ;-) ;-)