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

 

 


Tema destacado: Top 20 herramientas Hacking más populares de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda  (Leído 5,777 veces)
Synth3tik0

Desconectado Desconectado

Mensajes: 126


Ver Perfil
como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« en: 6 Junio 2013, 17:45 pm »


Según la funcion savearray() guarda el array, pero.. y ahora como leo el archivo(ahora q esta convertido en binario)?


también necesito ayuda en la funcion agregar() no se si le estoy pasando bien el arreglo, cuando la mando a llamar en main no hace nada porque no  me muestra los cout que tiene dentro ni me espera a que  escriba los datos, que estoy haciendo mal?

mas que nada trato de hacer dos funciones  uno que guarde un arreglo y otra que lo lea y lo "copie" a otro arreglo que tenga en el programa o al mismo, no se si se pueda pero la idea es poder modificarlo sin tener  acceder al binario y ya al final con todos lo cambios solo guardar..

Código
  1. #include <fstream>
  2. #include <iostream>
  3. #include <conio.h>
  4. #include <cstring>
  5. #include <string>
  6. #define pausa cin.get();
  7. using namespace std;
  8.  
  9. class libros{
  10.    public:
  11.    bool disponible = true;
  12.    string nombre;
  13.    string autor;
  14.    };
  15. //void saveArray(libros* array, int length);
  16. void saveArray(libros* array, int length)
  17. {
  18.    ofstream output("datos.txt",ios::out|ios::binary);
  19.    for(int a=0;a<length;a++)
  20.    {
  21.        output.write((char *) array,sizeof(array));
  22.    }
  23. }
  24.  
  25. int agregar(libros array[]){
  26.    for(int i;i<10;i++){
  27.            string nombre;
  28.            string autor;
  29.  
  30.            cout << "\nIngrese el nombre: ";
  31.            fflush(stdin);
  32.            getline(cin,nombre);
  33.            array[i].nombre = nombre;
  34.            cout << "\nIngrese el autor: ";
  35.            fflush(stdin);
  36.            getline(cin,autor);
  37.            array[i].nombre = autor;
  38.            return 0;
  39.    }
  40. }
  41.  
  42. int main()
  43. {
  44.    libros milibro[10];
  45.    cout << "Agregando libros.." << endl ;
  46.    agregar(milibro);
  47.    getch();
  48.    saveArray(milibro, 10);
  49.  
  50. }


En línea

..........
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #1 en: 6 Junio 2013, 20:20 pm »

Lo primero:

Código
  1. class libros{
  2. // ...
  3. bool disponible = true;
  4. // ...
  5. };
  6.  

De verdad te compila esto? La inicialización de miembros no estáticos de clases no debería estar permitida en su declaración, al menos eso dice el estándar...

En vez de eso puedes agregar un constructor, así:

Código
  1. class libros{
  2. public:
  3. // ...
  4. bool disponible;
  5. libros() : disponible(true) { }
  6.  
  7. // ...
  8. };
  9.  

Lo segundo, en saveArray():

Código
  1. output.write((char *) array,sizeof(array));

Fíjate que eso te debe de fallar porque sizeof(array) te va a devolver siempre 4 (u 8, dependiendo de la arquitectura del procesador), no el tamaño del array ni de un objeto de la clase libros.

En cuanto a leer el array: puedes hacer una función similar a saveArray(), pero con ifstream y la función miembro read() en vez de write().

Saludos.


En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #2 en: 6 Junio 2013, 20:49 pm »

De verdad te compila esto? La inicialización de miembros no estáticos de clases no debería estar permitida en su declaración, al menos eso dice el estándar...
Está permitida en el estándar C++11  :silbar:
« Última modificación: 6 Junio 2013, 20:59 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #3 en: 6 Junio 2013, 21:38 pm »

Está permitida en el estándar C++11  :silbar:

Ciertamente, pero francamente no creo que esté usando ese estándar, y además en el resto no está permitido. De todas formas, fallo mío, debería haberlo indicado.

Saludos.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #4 en: 6 Junio 2013, 21:43 pm »

Ciertamente, pero francamente no creo que esté usando ese estándar, y además en el resto no está permitido. De todas formas, fallo mío, debería haberlo indicado.
¿Y porque no puede usar ese estándar? A lo sumo le saldrá un warning que puede quitar activando el flag de C++11.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Synth3tik0

Desconectado Desconectado

Mensajes: 126


Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #5 en: 7 Junio 2013, 01:25 am »

Citar
Ciertamente, pero francamente no creo que esté usando ese estándar, y además en el resto no está permitido. De todas formas, fallo mío, debería haberlo indicado.
¿Y porque no puede usar ese estándar? A lo sumo le saldrá un warning que puede quitar activando el flag de C++11.

Sii, nomas me sale un warning

Citar
output.write((char *) array,sizeof(array));
Y en esta linea que deberia hacer?

Y sobre la funcion agregar() tienes idea porque no me muestra los couts?
En línea

..........
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #6 en: 7 Junio 2013, 01:30 am »

Un dato, C++ no requiere que se limpie el buffer de teclado. Por lo que no necesitas poner un fflush(stdin); (de hecho, creo que puede dar problemas si lo pones).

Y sobre la funcion agregar() tienes idea porque no me muestra los couts?
Pues porque has puesto un return 0 en el mismo for, lo que implica que la función se acaba al llegar ahí.

Sii, nomas me sale un warning
¿Usas Codeblocks? Vete a project -> build options y activa este flag:

En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
flony


Desconectado Desconectado

Mensajes: 565



Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #7 en: 7 Junio 2013, 04:54 am »

bueno para no andar generando nuevos post,una preguntonta como se pasa de standar c++ 11 a c++99 y viceversa?
En línea

si un problema no tiene solucion entonces no es un problema...es algo inevitable
amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #8 en: 7 Junio 2013, 10:52 am »

Me cachis, no me ha salido la imagen. Es en project -> build options -> "follow the blablabla... Cx11".

Para estándares antiguo lo mismo.
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: como guardar un arreglo en archivo binario y leerlo de nuevo? Ayuda
« Respuesta #9 en: 7 Junio 2013, 16:13 pm »

¿Y porque no puede usar ese estándar? A lo sumo le saldrá un warning que puede quitar activando el flag de C++11.

No he dicho que no pueda estar usando ese estándar, sino que no creo que lo esté usando. Y no creo que esté usando C++ 11 porque es muy nuevo y todavía no se usa mucho, nada más.
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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