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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  structura en c++ registro binarios ,Archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: structura en c++ registro binarios ,Archivos  (Leído 5,322 veces)
bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
structura en c++ registro binarios ,Archivos
« en: 8 Abril 2015, 18:44 pm »

buenas a todos !!


tengo una dudad estoy haciendo un app que guarda un estructura en un archivo (los datos) bien , la aplicacion toma los datos desde la consola luego los concatena con los que estan en el fichero ahora quiero tambien leer desde la estructura y me resulta medio dificil posteo el codidgo para ver si alguien me puede dar una mano por favor.

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. using namespace std;
  5. struct prueba{
  6.    int r;
  7. };
  8.  
  9. void escribir(struct prueba t){
  10.    fstream salida("test.b" , ios::out|ios::binary|ios::app|ios::ate);
  11.    salida.write(reinterpret_cast<char *>(&t), sizeof(prueba));
  12.    cout <<"Registro Escrito Exitosamente."<<endl;
  13.    salida.close();
  14.  }
  15.  
  16. int main()
  17. {
  18.  prueba re;
  19.  re.r =1;
  20.  escribir(re);
  21.  re.r =2;
  22.  escribir(re);
  23.  re.r =3;
  24.  escribir(re);
  25.  re.r =4;
  26.  escribir(re);
  27.    re.r =1;
  28.  escribir(re);
  29.    re.r =1;
  30.  escribir(re);
  31.  int l;
  32.  cout <<"\n pulse la tecla de enter"<<endl;
  33.  cin.get();
  34.  fstream entrada("test.b", ios::in|ios::binary);
  35.  entrada.seekg(0,entrada.end);
  36.  l = entrada.tellg();
  37.  int cnd = l/sizeof(prueba);
  38.  entrada.seekg(0,entrada.beg);
  39.  
  40.  cout <<"la longitud del fichero es : "<< cnd;
  41.  cin.get();
  42.  
  43.  vector<prueba> pr;
  44.  prueba obj;
  45.  for(int f= 1; f < cnd; f++)
  46.  {
  47.      entrada.read(reinterpret_cast<char*>(&obj), sizeof(prueba));
  48.      pr.push_back(obj);
  49.      entrada.seekg(cnd*f, entrada.cur);
  50.  
  51.  }
  52.  
  53.  
  54.  entrada.close();
  55.  for(int g=0;g< pr.size(); g++)
  56.    cout << "value : "<< pr.at(g).r<<endl;
  57.  
  58.  
  59.  cin.get();
  60.  cin.get();
  61.  return 0;
  62.  
  63. }

me gustaria que alguien explique por lo menos como puedo desplazar seekg() por que lo he intentao varias veces de diferente modos y me da tamanos waoo ...y he buscado por internet pero no he encotrado nada que comprenda.. :'(
Gracias Y disculpen la molestia.


« Última modificación: 8 Abril 2015, 19:04 pm por dummy001 » En línea

gracias por responder mis dudas
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: structura en c++ registro binarios ,Archivos
« Respuesta #1 en: 8 Abril 2015, 19:27 pm »

read() coge los X bytes de la estructura. No tienes que poner seekg() en el for.


En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: structura en c++ registro binarios ,Archivos
« Respuesta #2 en: 8 Abril 2015, 20:20 pm »

si eso lo se gracias ahora bien , como te has fijado el archivo el archivo cada vez que el programa se abre crea un registro entonces deseo ir registro por registro y copiarlo en la estructura y luego cargarlo en el vector entonces por eso uso
Código
  1. seekg()
por que me gustaria que se mueva entre los registros y asi poder copiarlo.

se entiende?

Gracias por tomarme en cuenta!!
En línea

gracias por responder mis dudas
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: structura en c++ registro binarios ,Archivos
« Respuesta #3 en: 8 Abril 2015, 20:24 pm »

Si quieres ir a un byte concreto de archivo, puedes usar simplemente seekg(N), donde n es el byte.
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: structura en c++ registro binarios ,Archivos
« Respuesta #4 en: 8 Abril 2015, 20:39 pm »

esta bien entendi eso pero por que al llegar a este punto el programa se cierra:

Código
  1. fstream entrada("test.b", ios::in|ios::binary);
  2.  entrada.seekg(0,entrada.end);
  3.  l = entrada.tellg();
  4.  int cnd = l/sizeof(prueba);
  5.  entrada.seekg(0,entrada.beg);
  6.  
  7.  cout <<"la longitud del fichero es : "<< cnd;
  8.  cin.get();
  9.  
  10.  vector<prueba> pr;
  11.  prueba obj;
  12.  for(int f= 1; f < cnd; f++)
  13.  {
  14.     ////////////////Aqui
  15.      entrada.read(reinterpret_cast<char*>(&obj),sizeof(prueba));
  16.      pr.push_back(obj);
  17.      entrada.seekg(l*f);
  18.  
  19.  }
  20. ///
  21.  
  22.  entrada.close();
  23.  for(int g=0;g< pr.size(); g++)
  24.    cout << "value : "<< pr.at(g).r<<endl;
  25.  
En línea

gracias por responder mis dudas
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: structura en c++ registro binarios ,Archivos
« Respuesta #5 en: 8 Abril 2015, 20:46 pm »

Exactamente en qué instrucción se cierra?
¿Se cierra con error?
En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: structura en c++ registro binarios ,Archivos
« Respuesta #6 en: 8 Abril 2015, 20:55 pm »

cuando trataba de leer!!

lo resolvi aunque no me di cuenta cual era el error


ahora creo que avanze por que me lee dos registros

pero si tengo 24 registro y me cuenta el tamanao y todo pero solo me lee dos

cambie el for un poco!!
 
Código
  1.  for(int f= sizeof(prueba); f < cnd*(sizeof(prueba)); f += f)
  2.  {
  3.      entrada.read(reinterpret_cast<char*>(&obj), sizeof(prueba) );
  4.      pr.push_back(obj);
  5.      entrada.seekg(sizeof(prueba),ios::beg);
  6.  
  7.  }
En línea

gracias por responder mis dudas
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: structura en c++ registro binarios ,Archivos
« Respuesta #7 en: 8 Abril 2015, 20:59 pm »

Haces operaciones absurdas fon 'f', y nunca la utilizas.
Simplemente:

Código
  1. for(int i=0; i<cnd; i++)
  2. {
  3.    entrada.seekg(i*sizeof(prueba));
  4.    entrada.read(reinterpret_cast<char*>(&obj), sizeof(prueba) );
  5.    pr.push_back(obj);
  6. }
« Última modificación: 9 Abril 2015, 16:41 pm por ivancea96 » En línea

bash

Desconectado Desconectado

Mensajes: 258



Ver Perfil
Re: structura en c++ registro binarios ,Archivos
« Respuesta #8 en: 9 Abril 2015, 16:30 pm »

es cierto es asi !! me ha corrido parcialmete bien pero por que el archivo me lee dos veces el primer registro ?
En línea

gracias por responder mis dudas
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: structura en c++ registro binarios ,Archivos
« Respuesta #9 en: 9 Abril 2015, 16:42 pm »

Acabo de corregirlo, poniendo el seekg() al principio del bucle. En cualquier caso, no necesitas el seekg(), prueba prescindiendo de él.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Leer datos binarios del registro
Programación Visual Basic
Kizar 6 4,314 Último mensaje 17 Julio 2006, 23:31 pm
por Kizar
Archivos Binarios
Programación Visual Basic
David Vans 5 2,270 Último mensaje 14 Octubre 2006, 19:32 pm
por Nymphetaminito
Archivos Binarios
.NET (C#, VB.NET, ASP)
David Vans 2 3,515 Último mensaje 1 Junio 2007, 13:45 pm
por »~^~«CkNU!»~^~«
Archivos binarios en VB6???
Programación Visual Basic
Bb-7 1 3,963 Último mensaje 10 Abril 2008, 17:26 pm
por krackwar
Archivos Binarios
Programación Visual Basic
TheGhost(Z) 0 1,687 Último mensaje 21 Agosto 2010, 16:24 pm
por TheGhost(Z)
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines