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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  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,258 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:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Insertar datos en Archivo Binario
Programación C/C++
willy1855 7 4,410 Último mensaje 16 Abril 2012, 05:27 am
por durasno
[C] Llenar archivo Binario, y borrar datos mayores al promedio
Programación C/C++
ramaa000 3 3,793 Último mensaje 5 Marzo 2015, 02:57 am
por rir3760
Error Leyendo un archivo con varios objetos
Java
bash 0 1,181 Último mensaje 11 Febrero 2016, 16:42 pm
por bash
Pasar datos de un archivo binario a una lista dinamica
Programación C/C++
ezar147 3 2,643 Último mensaje 10 Junio 2017, 01:07 am
por ezar147
[javascript] Leyendo un archivo de texto.
Desarrollo Web
MA40 2 1,460 Último mensaje 25 Marzo 2018, 13:48 pm
por MA40
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines