elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  error en runtime leyendo datos de un archivo binario c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: error en runtime leyendo datos de un archivo binario c++  (Leído 2,698 veces)
winroot


Desconectado Desconectado

Mensajes: 589

#include<winroot.h>


Ver Perfil WWW
error en runtime leyendo datos de un archivo binario c++
« en: 16 Mayo 2010, 00:03 am »

hola!

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. using namespace std;
  5. struct tipoRegistro {
  6. string nombre;
  7. int edad;
  8. float altura;
  9. };
  10. int main()
  11. {
  12. tipoRegistro pepe;
  13.  
  14. ofstream fsalida("prueba.dat",ios::out | ios::binary);
  15. pepe.nombre="jose luis";
  16. pepe.edad = 32;
  17. pepe.altura = 1.78;
  18. fsalida.write(reinterpret_cast<char *>(&pepe),
  19. sizeof(tipoRegistro));
  20. fsalida.close();
  21. return 0;
  22. }
  23.  
el problema, es que quiero leer los datos desde otro programa:
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. using namespace std;
  5. struct tipoRegistro {
  6. string nombre;
  7. int edad;
  8. float altura;
  9. };
  10. int main()
  11. {
  12. tipoRegistro pepe;
  13. ifstream fentrada("prueba.dat",
  14. ios::in | ios::binary);
  15. fentrada.read(reinterpret_cast<char *>(&pepe),
  16. sizeof(tipoRegistro));
  17. cout <<pepe.nombre <<endl;
  18. cout << pepe.edad << endl;
  19. cout << pepe.altura << endl;
  20. fentrada.close();
  21. cin.get();
  22. return 0;
  23. }
  24.  
el problema es en este último programa, el  encargado de leer los datos del archivo prueva.dat.
compila perfecto, pero el error es en runtime.
nose   exactamente que es lo que esta mal, ya que el programa tira unos beeps, algo de las variables de entorno programfiles y esas cosas y se  cierra.

provado en dev c++ y en  CodeBlocks , dando exactamente el mismo resultado, probablemente porque los dos ides  usen el gcc.

porqué si uso todo en un mismo programa, pero quiero separar en un programa que lea los datos y otro que los escriba pasa esto?
el problema, es que si pongo todo en un mismo programa, no estaría leyendo los datos del fichero en si, ya que estarían ya cargados en ram.
me refiero a esto:
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4. using namespace std;
  5. struct tipoRegistro {
  6. string nombre;
  7. int edad;
  8. float altura;
  9. };
  10. int main()
  11. {
  12. tipoRegistro pepe;
  13.  
  14. ofstream fsalida("prueba.dat",ios::out | ios::binary);
  15. pepe.nombre="jose luis";
  16. pepe.edad = 32;
  17. pepe.altura = 1.78;
  18. fsalida.write(reinterpret_cast<char *>(&pepe),
  19. sizeof(tipoRegistro));
  20. fsalida.close();
  21. ifstream fentrada("prueba.dat",
  22. ios::in | ios::binary);
  23. fentrada.read(reinterpret_cast<char *>(&pepe),
  24. sizeof(tipoRegistro));
  25. cout <<pepe.nombre <<endl;
  26. cout << pepe.edad << endl;
  27. cout << pepe.altura << endl;
  28. fentrada.close();
  29. cin.get();
  30. return 0;
  31. }
  32.  
así funciona perfecto, pero hacer esto no   tiene  ninguna utilidad.

bueno, gracias por su  tiempo y disculpen las molestias.
un saludo!   


« Última modificación: 16 Mayo 2010, 00:08 am por winroot » En línea

Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com
Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: error en runtime leyendo datos de un archivo binario c++
« Respuesta #1 en: 16 Mayo 2010, 01:05 am »

El problema es un string es un objeto dinámico, guardar sus bits en un archivo y volver a leerlos no sirve de nada. El manejo de memoria no garantiza que los datos van a estar reservados exactamente en los mismos lugares.

El modo binario debe usarse con precaución y siempre desarrollando funciones que se encarguen de trabajar una estructura/archivo en especifico, en pos que las distintas ejecuciones no sean un problema (Como una forma de guardar/leer estándar para tu programa).

No lo puedo compilar ahora, pero prueba quitando el cout de "nombre" y probablemente el error desaparezca debido a lo antes mencionado.


En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
winroot


Desconectado Desconectado

Mensajes: 589

#include<winroot.h>


Ver Perfil WWW
Re: error en runtime leyendo datos de un archivo binario c++
« Respuesta #2 en: 16 Mayo 2010, 01:29 am »

El problema es un string es un objeto dinámico, guardar sus bits en un archivo y volver a leerlos no sirve de nada. El manejo de memoria no garantiza que los datos van a estar reservados exactamente en los mismos lugares.

El modo binario debe usarse con precaución y siempre desarrollando funciones que se encarguen de trabajar una estructura/archivo en especifico, en pos que las distintas ejecuciones no sean un problema (Como una forma de guardar/leer estándar para tu programa).

No lo puedo compilar ahora, pero prueba quitando el cout de "nombre" y probablemente el error desaparezca debido a lo antes mencionado.
gracias por tu ayuda, mañana lo pruevo y te cuento.
ahora en donde estoy se me hace  imposible compilar.
saludos y gracias!
En línea

Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines