hola amigos!!!
tengo un problema... estoy intentando guardar una lista enlazada en un archivo!!!... aki pongo el código, denotando en negritas el código en el que tengo el error D;! para posteriormente plantearles mis dudas D;!!! Espero y puedan ayudarme :)! de antemano Gracias...
#include <iostream>
using namespace std;
#include <fstream>
using std::ofstream;
using std::ostream;
using std::fstream;
#include <cstring>
using namespace std;
#include <cstdlib>
using std::exit;
#include "listaUsuarios.h"
int main()
{
fstream archivoManipulacion("Usuarios.dat",ios::in|ios::ou t|ios::binary);//abrimos
//un archivo en modo escritura, binario y de lectura
if (!archivoManipulacion) //si no se pudo abrir... salimos del programa
{
cerr << endl << "No se pudo crear o abrir el archivo..." << endl;
exit(1);
}
int seleccion;
string _nombre, _grupo, _respuesta;
listaUsuarios miUsuario;
do
{
cout << endl << "*****MENU*****";
cout << endl << "1. Comenzar Prueba.";
cout << endl << "2. Guardar Tus Resultados.";
cout << endl << "3. Terminar Aplicación.";
cout << endl << "Su selección: ";
cin >> seleccion;
switch (seleccion)
{
case 1:
do
{
cout << endl << "Escribe tu Nombre completo (nombre apellidos): ";
cin.ignore(1,'\n');
getline(cin,_nombre);
cout << endl << "Escribe tu grupo: ";
getline(cin,_grupo);
miUsuario.insertaDatosInicialesAlumno(_nombre.c_st r(),_grupo.c_str());
do
{
miUsuario.generaPregunta();
getline(cin,_respuesta);
miUsuario.revisaRespuesta(_respuesta.c_str());
}
while (_respuesta != "SALIR");
miUsuario.calificaUsuario();
miUsuario.imprimeListaUsuarios();// imprimimos la lista original
}
while (_respuesta != "SALIR");
break;
case 2:
miUsuario.archivaRegistros(archivoManipulacion);
break;
case 3:
cout << "Fin del programa" << endl;
miUsuario.imprimeArchivoTexto(archivoManipulacion) ;
break;
default:
cout << "Opción no válida";
break;
}
}
while (seleccion != 3);
return 0;
}
void archivaRegistros(fstream &archivoVacio)
{
datosArchivar datosUsuario;
Alumno nodoArchivar = frente_alumno;
while (nodoArchivar != NULL)
{
datosUsuario.posicion = 22;
datosUsuario.nomb = (*nodoArchivar).nombres;
datosUsuario.grup = (*nodoArchivar).grupos;
datosUsuario.acier = (*nodoArchivar).aciertos;
datosUsuario.error = (*nodoArchivar).errores;
datosUsuario.calif = (*nodoArchivar).calificaciones;
archivoVacio.write( reinterpret_cast<const char*>(&datosUsuario), sizeof(datosArchivar));
nodoArchivar = (*nodoArchivar).ptrSiguiente;
}
}
void imprimeArchivoTexto(fstream &archivoaLeer)
{
ofstream archivoTexto("Usuarios.txt", ios::out);
if (!archivoTexto){
cerr << endl << "No se pudo crear el archivo de texto." << endl;
exit(1);
}
archivoTexto << endl << "Posición\tNombre\t\t\t\t\t\tGrupo\t\tAciertos\tEr rores\tCalificación"<< endl;
archivoaLeer.seekg(0);
datosArchivar datosTexto;
archivoaLeer.read( reinterpret_cast <char *>(&datosTexto),sizeof(datosArchivar));
while(!archivoaLeer.eof())
{
archivoaLeer.read( reinterpret_cast <char *>(&datosTexto),sizeof(datosArchivar));
archivoTexto << datosTexto.posicion << "\t\t";
archivoTexto << datosTexto.nomb << "\t";
archivoTexto << datosTexto.grup << "\t";
archivoTexto << datosTexto.acier << "\t\t";
archivoTexto << datosTexto.error << "\t";
archivoTexto << datosTexto.calif << endl;
archivoaLeer.read( reinterpret_cast <char *>(&datosTexto),sizeof(datosArchivar));
}
}
datosArchivar es mi estructura....
Amigos!!! según yo... al principio (primer código negritas) abro un archivo para guardar datos binarios... y SEGUN MIS DESEOS D;!! los datos se escriben sobre el archivo... después de datos que ya tenga!!!.... sin embargo cada vez que corro mi programa... éste sobreescribe los valores!! :( por lo que en realidad no me sirve de nada el archivo... porque no guarda la información de "corridas anteriores de mi programa"....
En la parte de abajo viene la definición de mis métodos ( los que guardan los registros Binarios) y los que generan el archivo .txt :(.... Otro problema que tengo, es que cuando genera el archivo txt solo guarda un (n - 1 ) nombres, es decir no guarda el último!! e igual...