Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/06/2013, 10:03
Synth3tik0
 
Fecha de Ingreso: junio-2013
Ubicación: Neverland
Mensajes: 2
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Guardar y leer arreglo de objetos en archivos binarios?

Si me pudieran mostrarme en este codigo como guardar y leer un arreglo en binario. En el case 7: guardo el archivo, se crea y todo pero no estoy seguro si se guardo bien porque no puedo leerlo en el case 1: simplemente se cuelga el programa, no se si sea un problema mio al guardar el archivo o un problema en el codigo q lee el archivo. Llevo un par de dias preguntando y nadie me da una respuesta acertada. Cualquier tipo de ayuda se agradecera

[URL="https://mega.co.nz/#!6FERSZgb!EderQBvaxhpUefz9ZjxhXxj5oe0nSILaP6no2wj 8UQo"]https://mega.co.nz/#!6FERSZgb!EderQBvaxhpUefz9ZjxhXxj5oe0nSILaP6no2wj 8UQo[/URL]

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstring>
  3. #include <string>
  4. #include <stdio.h>
  5. #include <fstream>
  6. #define pausa cin.get();
  7. using namespace std;
  8. class libros{
  9. public:
  10. string nombre;
  11. string autor;
  12. private:
  13. };
  14.  
  15.  
  16. int agregar(libros array[], int lenth){
  17.     for(int i = 0; i < lenth; i++ ){
  18.         cout << "\ningrese un nombre: \n" << endl;
  19.         cin >> array[i].nombre;
  20.         cout << "\ningrese un autor" << endl;
  21.         cin >> array[i].autor;
  22.     }
  23.  return 0;
  24. }
  25.  
  26. int buscar(libros array[], int lenth, string palabra){
  27.     int indice;
  28.     for(int i = 0; i < lenth; i++ ){
  29.         if(palabra == array[i].nombre){
  30.             indice = i;
  31.             }
  32.             else{
  33.                 if(palabra == array[i].autor){
  34.                     indice = i;
  35.  
  36.                     }else{
  37.                         continue;
  38.                     }
  39.  
  40.                 }
  41.     }
  42.  return indice;
  43. }
  44.  
  45. int mostrardatos(){
  46.  
  47. }
  48.  
  49. int main(){
  50.  
  51. libros milibro[4];
  52. libros recibidor[4];
  53.  
  54. bool salir = true;
  55.  
  56.     int option = 0;
  57.     do{
  58.         cout << "Elige una opcion:" << endl;
  59.         cout << "(1) cargar un archivo" << endl;
  60.         cout << "(2) para agregar datos " << endl;
  61.         cout << "(3) para listar datos" << endl;
  62.         cout << "(4) para buscar datos" << endl;
  63.         cout << "(5) para modificar datos" << endl;
  64.         cout << "(6) para borrar registro" << endl;
  65.         cout << "(7) para guadar y salir del programa" << endl;
  66.  
  67.         cin >> option;
  68.         switch(option){
  69.             case 1:{
  70.                 char entrada[100];
  71.                 cout << "Escribe el nombre de la base de datos" << endl;
  72.                 cin >> entrada;
  73.  
  74.                 ifstream lector(entrada,ios::in|ios::binary);
  75.                 if(!lector) //operador sobre cargado
  76.                      {
  77.                      cerr<<"No se pudo lograr abrir el archivo"<<endl;
  78.                      cerr<<"Error al momento de intentar crearlo"<<endl;
  79.                      pausa
  80.                      return 1;
  81.                     }
  82.  
  83.                 // original lector.read((char *)&recibidor,sizeof(recibidor));
  84.                 lector.read(reinterpret_cast<char*>  (&recibidor),sizeof(libros));
  85.  
  86.                 for(int i=0;i<10;i++){
  87.                     cout<<recibidor[i].nombre<<' ';
  88.                     }
  89.                   cout<<'\n';
  90.                   cout<<lector.gcount()<<"characters read\n";
  91.                   lector.close();
  92.                   for(int i = 0; i < 4; i++){
  93.                   cout << recibidor[i].nombre << endl;
  94.                   cout << recibidor[i].autor << endl;
  95.                   }
  96.                   pausa
  97.                   break;}
  98.             case 2:
  99.                 agregar(milibro,4);
  100.                 break;
  101.  
  102.             case 3:
  103.                 for(int a = 0; a < 4; a++){
  104.                     cout << "\n############" << endl;
  105.                     cout << "Nombre: " << milibro[a].nombre << endl;
  106.                     cout << "Autor: " << milibro[a].autor;
  107.                     milibro[a].autor;
  108.                 }
  109.                 pausa
  110.  
  111.                 break;
  112.             case 4:{
  113.                 string entra;
  114.                 cout << "introduce una palabra a buscar" << endl;
  115.                 cin >> entra;
  116.                 int indicador = buscar(milibro,4,entra);
  117.                 cout << "Nombre: " << milibro[indicador].nombre << endl;
  118.                 cout << "Autor: " << milibro[indicador].autor;
  119.                 pausa
  120.                 break;}
  121.             case 5:{
  122.                 string ent;
  123.                 cout << "introduce un indice de registro q deseas modificar" << endl;
  124.                 cin >> ent;
  125.                 int ind;
  126.                 ind = buscar(milibro,4,ent);
  127.                 cout << "Introduce nuevo nombre: " <<  endl;
  128.                 cin >> milibro[ind].nombre;
  129.                 cout << "Introduce nuevo autor: " << endl;
  130.                 cin  >> milibro[ind].autor;
  131.                 break;}
  132.             case 6:
  133.                 int borrar;
  134.                 cout << "Introduce el numero de registro que quieres borrar" << endl;
  135.                 cin >> borrar;
  136.                 milibro[borrar].nombre = "";
  137.                 milibro[borrar].autor = "";
  138.                 cout << "Archivo borrado" << endl;
  139.                 pausa
  140.                 break;
  141.             case 7:
  142.                 ofstream escritor("biblioteca.txt", ios::out|ios::binary);
  143.                 for(int t = 0; t < 4 ; t++){
  144.                 escritor.write((char *)&milibro[t],sizeof(milibro));
  145.                 }
  146.                 escritor.close();
  147.                 salir = false;
  148.                 break;
  149.         }
  150.  
  151.     }while(salir == true);
  152.  
  153.  
  154. return 0;
  155. }