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