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

German Alberto Gimenez Silva programacion@lugro.org.ar
Sat, 3 Mar 2007 07:52:17 -0300


El Viernes, 2 de Marzo de 2007 21:21, german morre escribió:
> 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 :)
>
Hola no lo descubrí yo

struct regExpediente {
	int numeroExpedienteReg;
	char* fechaReg;
	int fojasReg;
	char* asuntoReg;
	char* tipoIniciadorReg;
	int numeroIniciadorReg;
}

El problema radica en que las variables char* nombre no tienen tope entonces 
no puede calcular el largo y se destruyen los datos.

Osea donde dice "cha* nombreVariable;" habria que poner por ejemplo "char 
nombreVariable[50] y debería funcionar.

Saludos y gracias por las respuestas.


>
> ----- 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
>
> _______________________________________________
> Programacion mailing list
> Programacion@lugro.org.ar
> http://www.lugro.org.ar/mailman/listinfo/programacion