• Domingo 5 de Mayo de 2024, 12:56

Autor Tema:  escribir float en archivo binario  (Leído 1219 veces)

depruebas

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
escribir float en archivo binario
« en: Sábado 22 de Mayo de 2010, 10:43 »
0
Buenas es mi primer mensaje en este foro, y esque ya estoy agobiadisimo con el programa que debo hacer, haber el tema es que tengo que hacer una funcion donde le pase precio y fecha de unos libros y me lo guarde en un archivo binario (todo esta en una estructura), con la fecha no tengo problema porque son enteros pero con los float me esribe numeros larguisimos, he probado con cast y no me funciona, hacer vector de enteros para poner el precio pero tampoco ya no se que hacer alguien me dice como hacerlo o me da alguna idea?? Os dejo el codigo que tengo ahora mismo.

void GuardarFechas (Vector libro, int i)
{
     ofstream fich;
     float* ptf = &libro.precio;
     fich.open ("prueba.bin", ios::binary | ios::app);
     
     if (!fich)
         cout << " Error al abrir el archivo ";
     else
     {
         fich.write (reinterpret_cast<char*> (&ptf), sizeof(float));
         fich.write ((char *) (& libro.fecha), sizeof(libro.fecha));
     }
     fich.close ();
}


Normalmente lo tenia asi:

void GuardarFechas (Vector libro, int i)
{
     ofstream fich;
     float* ptf = &libro.precio;
     fich.open ("prueba.bin", ios::binary | ios::app);
     
     if (!fich)
         cout << " Error al abrir el archivo ";
     else
     {
         fich.write ((char*) (&libro.precio), sizeof(float));
         fich.write ((char *) (& libro.fecha), sizeof(libro.fecha));
     }
     fich.close ();
}


y bueno la estructura que tengo es:
struct Fecha
{
    int dia;
    int mes;
    int anyo;
};

struct Libro
{
    string titulo;
    string autor;
    float precio;
    Fecha fecha;
};

Y un vector de la estructura Libro.

Espero que alguno podais ayudarme

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: escribir float en archivo binario
« Respuesta #1 en: Sábado 22 de Mayo de 2010, 11:34 »
0
¿Y por qué no así:

fich<<libro.precio;

y así:

fich>>libro.precio;

?

Además, puedes guardar el array de una tacada sin problemas. Más o menos así (lo hago de cabeza, así que seguro que no está bien del todo):

fich.write(libro,sizeof(libro)*tama_array);

Ten en cuenta que si entre escritura y lectura no cierras/abres el archivo lo tendrás que rebobinar con el equivalente a fseek (que ahora no recuerdo cuál es) porque si no la lectura se hace después de la escritura...
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

depruebas

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: escribir float en archivo binario
« Respuesta #2 en: Lunes 24 de Mayo de 2010, 15:34 »
0
Bueno pues ya esta solucionado el tema, rfog como tu dices en archivo binario creo que no se puede hacer, bueno si se puede pero no lo guarda bien, tambien probé con eso, al final lo deje asi:

void GuardarFechas (Vector libro, int i)
{
ofstream fich;
fich.open ("prueba.bin", ios::binary | ios::app);

if (!fich)
cout << " Error al abrir el archivo ";
else
{
fich.write ((char *) (& libro.precio), sizeof(precio));
fich.write ((char *) (& libro.fecha), sizeof(libro.fecha));
}
fich.close ();
}


me guarda un numero largo (10 cifras) pero luego cuando lo recupero me lo hace bien asi que al final lo dejo asi, no entiendo porque hace eso pero bueno.

Asi que nada todo solucionado, gracias!