Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bash en 23 Mayo 2013, 05:42 am



Título: Explicacion acerca de fstream
Publicado por: bash en 23 Mayo 2013, 05:42 am
buenas hace tiempo que no programaba nada digo c++ la verdad nunca comprendí del todo algunas cosas pero bien ahora me interesa mucho me podrían ayudar con el siguiente problema.

es un fichero binario que almacena datos  una estructura con un solo campo luego de almacenado la información quiero recorrer  con seekg o bien un método mejor recomendado por ustedes.


Alguien me podria explicar...


abajo pongo un ejemplo del código que quiero arreglar.

Código
  1. /*
  2. */
  3.  
  4.  
  5. #include<fstream>
  6. #include<iostream>
  7.  
  8.  
  9. using namespace std;
  10.  
  11.  
  12. struct bin{
  13.   int datp ;
  14.  
  15. };
  16. void WriteBinaryStruct(bin b)
  17. {
  18.    ofstream bina("datos.bin", ios::out|ios::binary|ios::ate);
  19.  
  20. if(bina.is_open()){
  21.  
  22.          ///tendria yo que hacer algo aqui para avanzar ?
  23.          bina.write(reinterpret_cast<char *>(&b), sizeof(b));
  24.   cout << "Se ha escrito un registro."<<endl;
  25.   bina.close();
  26. }else cout << "Error abriendo el archivo."<<endl;
  27.  
  28.  
  29.  
  30. }
  31.  
  32. bin  ReadBinary(int &c){
  33.  ifstream bina("datos.bin", ios::in|ios::binary);
  34. bin b;
  35. if(bina.is_open()){
  36.   bina.seekg(c,ios::beg );
  37.   bina.read(reinterpret_cast<char *>(&b), sizeof(bin));
  38.   cout << "Se ha leido un registro."<<endl;
  39.  
  40.   bina.seekg(0,ios::end);
  41.   int lon = bina.tellg();
  42.   cout << "cantidad de registro leidos :"<< lon/sizeof(bina);
  43.   bina.close();
  44.  
  45. }else cout << "Error abriendo el archivo."<<endl;
  46.  
  47.  
  48.    return b;
  49.  
  50. }
  51.  
  52.  
  53.  
  54. int main(int argc, char *argv[]){
  55.  
  56.     int c(sizeof(bin)) ;
  57.     bin b ={2233};
  58. bin r = {345};
  59. bin b2;
  60. bin b3;
  61. WriteBinaryStruct(b);
  62. b2 = ReadBinary(c);
  63.     c = c*1;                                 ///podria ser 2?
  64.     b3 = ReadBinary(c);
  65. cout<< b2.datp <<endl;
  66. cout<<"Registro leido"<<endl ;
  67. cout<< b3.datp <<endl;
  68. cout<<"Registro leido" ;
  69.   for(;;);
  70.  
  71.  
  72. }
  73.  
  74.  
  75.  


la salida que me da es la siguiente.
[color=blackSe ha escrito un registro.
Se ha leido un registro.
cantidad de registro leidos :17043521Se ha leido un registro.
cantidad de registro leidos :170435214693916
Registro leido
4693916
Registro leido

Process returned 0 (0x0)   execution time : 4.511 s
Press any key to continue.



][/color]
gracias -


Título: Re: Explicacion acerca de fstream
Publicado por: bash en 24 Mayo 2013, 14:30 pm
quisiera saber como puedo recorrer los dos registro que se crearon ?
es algo basico pero nunca lo he entendido y buscado por el buscador del foro y nada.

 :-[ :-[