[C con Clase] FSTREAMS, Estoy olvidado en algunos conceptos y uso

Listero Absoluto listeroabsoluto en gmail.com
Vie Abr 27 18:51:26 CEST 2007


Buenas.

Hace rato que no uso esta clase y luego de mi "tour" por varios
lenguajes... estoy muy olvidado de como usarla y tengo un par de
preguntas:

Si defino una estructura, por ejemplo:

typedef
struct SData
{
    int x;
    char c[50];
    float y;
};


Y necesito escribirla e inmediatamente leerla utilizo la siguiente
secuencia de metodos:

    SData data, d2;
    data.x = 1;
    strcpy(data.c, "Hola");
    data.y = .56;

    fstream fs;

    fs.open("file.dat", ios::in);
    // Con esto creo el archivo si no existe
    if (!fs)
        fs.open("file.dat", ios::out | ios::binary);

    fs.close();
    fs.open("file.dat", ios::in | ios::out | ios::binary);

    // Para saber si abrió correctamente
    cout << "Archivo "<< !fs.is_open()?"NO ":"" << "abierto" << endl;

    fs.write((char*)&data,  sizeof(data));
    cout << "WRITE = " << fs.good() << endl; // Me imprime 1

    fs.read((char*)&d2,  sizeof(d2));
    cout << "READ = " << fs.good() << endl; // Me imprime 0 !!!!

    // Al fallar la operacion de lectura, la siguiente linea imprime basura
    cout << "Data : (" << d2.x << ", " << d2.c << ", " << d2.y << ")" << endl;

    fs.close();

Como verán el programa solo sirve para refrescarme la memoria, sin
embargo no doy con el error. Quizá conceptualmente estoy errando en
algo, o simplemente olvido invocar algún metodo entre los citados.
De todas maneras ese programa no sirve, tiene un error. Y es por eso
que les pediria que me den una mano indicandome que modificar y porque
hacerlo.

-- 
Saludos y gracias.




Más información sobre la lista de distribución Cconclase