[Programación] Re: [Programación] Consulta-Tirania del fstream

german morre programacion@lugro.org.ar
Fri, 2 Mar 2007 21:21:18 -0300


Hola German

Segun este ejemplo:

/**------------------
Reading and Writing Complex Data
Although the read and write methods accept a char* pointer, there is no 
requirement that the data you read and/or write be held in a char array. You 
can read or write complex data objects using simple type casting of 
pointers:
    #include <fstream.h>
    ...
    class Data {
        int    key;
        double value;
    };

    Data x;
    Data *y = new Data[10];

    fstream myFile ("data.bin", ios::in | ios::out | ios::binary);
    myFile.seekp (location1);
    myFile.write ((char*)&x, sizeof (Data));
    ...
    myFile.seekg (0);
    myFile.read ((char*)y, sizeof (Data) * 10);------------------*/

Sacado de : 
http://www.angelfire.com/country/aldev0/cpphowto/cpp_BinaryFileIO.html

Lo que estas haciendo parece estar bien, lamentablemente en este momento 
estoy usando un equipo que no tiene un sistema operativo como la gente 
instalado como para hacer la misma prueba que vos y ver que pasa, pero 
leyendo el ejemplo anterior parece que lo que haces esta bien..

Segun lo que contas el tema esta en que cuando haces una lectura del archivo 
algunos componentes de la estructura (los char) vienen con cualquier 
verdura, entonces.. estas seguro que es cuando escribis el archivo el 
problema? no sera que algo esta mal en la parte de la lectura del archivo?

Suerte con la solucion del problema y de paso, si la encontras, conta cual 
fue :)

German

----- Original Message ----- 
From: "German Alberto Gimenez Silva" <ggerman@gmail.com>
To: <programacion@lugro.org.ar>
Sent: Friday, March 02, 2007 10:54 AM
Subject: [Programación] Consulta-Tirania del fstream


> Hola le comento que tengo un problema poco usual:
> ofstream archiexpte;
> archiexpte.open("expediente.dat", std::ios::binary | std::ios::app);
>
> if (archiexpte.fail() || archiexpte.bad()) {
> return false;
> } else {
> archiexpte.write((char *) &registroExpediente, sizeof(regExpediente));
> archiexpte.close();
> return true;
> }
>
> Donde registroExpediente es de tipo:
> struct regExpediente {
> int numeroExpedienteReg;
> char* fechaReg;
> int fojasReg;
> char* asuntoReg;
> char* tipoIniciadorReg;
> int numeroIniciadorReg;
> }
>
> El problema es que escribo y a los nros los almacena bien pero a los char* 
> no,
> cuando los leo muestra cualquier cosa.
>
> Uds. se preguntaran żpor que usa fstream?
> Estoy haciendo un practico para la facultad en Qt y tiene la clase QFile y
> bueno en Gral toda la libreria esta barbara, pero estoy obligado a 
> utilizar
> archivos binary de c++; que se le va a hacer.
>
> Saludos y gracias de antemano.
>
> _______________________________________________
> Programacion mailing list
> Programacion@lugro.org.ar
> http://www.lugro.org.ar/mailman/listinfo/programacion