Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con archivos y estructuras!!!...

Estas en el tema de Ayuda con archivos y estructuras!!!... en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 30/12/2010, 20:50
 
Fecha de Ingreso: diciembre-2010
Mensajes: 8
Antigüedad: 13 años, 4 meses
Puntos: 0
Ayuda con archivos y estructuras!!!...

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...
  #2 (permalink)  
Antiguo 30/12/2010, 23:44
 
Fecha de Ingreso: diciembre-2010
Mensajes: 8
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: Ayuda con archivos y estructuras!!!...

ya resolví uno de los problemasss jojo era una tontería.....

para no sobreescribir el archivo, al crearlo tenía que abrirlo en modo append (que ubica el puntero al final del archivo), para que la información se cree después de la ya introducida... :)


fstream archivoManipulacion("Usuarios.dat",ios::in|ios::ap p|ios::out|ios::binary);//abrimos
//un archivo en modo escritura, añadidura (append), binario y de lectura

:D Por si alguien mas tiene éste problema :D

Etiquetas: estructuras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:56.