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

 

 


Tema destacado: Curso de javascript por TickTack


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

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Archivos bINARIOS c++
« en: 7 Febrero 2016, 19:17 pm »

Buenas tarde quisiera saber como podría hacer llenar un archivo binario desde teclado con un arrays de estructuras

Código:
#include <iostream>
#include <fstream>
using namespace std;

struct alumno{

string nombre;
string apellido;
int edad;
};

int main () {


alumno alum[50];

ofstream f;

f.open("alumnos.bin", ios::out | ios::binary);
if(f.open){

for (int i=0; i<=50; i++){

cout<<"Teclee el nombre del alumno"<<endl;
cin>>alum[i].nombre
cout<<"Teclee  el apellido"<<endl;
cin>>alum[i].apellido;
cout<<"Teclee  la edad"<<endl;
cin>>alum[i].edad;
}

}
else {
cout<<"Error al abrir el archivo"<<endl;
}
is.close();


return 0;
}
Así lo implemente pero me da error al compilar


« Última modificación: 9 Febrero 2016, 18:42 pm por Eternal Idol » En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Archivos bINARIOS c++
« Respuesta #1 en: 8 Febrero 2016, 00:21 am »

Las clases tipo string no guardan la cadena de caracteres en la memoria ocupada por la estructura en sí. Para mayor comodidad, declararía la estructura así:

Código
  1. struct alumno {
  2.    char nombre[256];
  3.    char apellido[256];
  4.    int edad;
  5. };

Una vez rellenada dicha estructura, es tan simple como copiar byte a byte la memoria de la estructura:

Código
  1. f.write(reinterpret_cast<const char*>(&alum[i]), sizeof(alumno);


En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: Archivos bINARIOS c++
« Respuesta #2 en: 8 Febrero 2016, 02:39 am »

Solo eso, o tengo que hacerlo con cada miembro de la estructura ? esta parte la copio tal cual? (reinterpret_cast<const char*>, otra pregunta si quiero leer el archivo sería tal cual pero cambiando a fread? nunca he usado archivo por eso ando perdido
En línea

class_OpenGL


Desconectado Desconectado

Mensajes: 437

Si usas Direct3D, no eres mi amigo :P


Ver Perfil
Re: Archivos bINARIOS c++
« Respuesta #3 en: 8 Febrero 2016, 15:28 pm »

Lo que hace el código es pasarle todos los datos de la estructura al método ofstream::write. Le pasas los datos en forma de array de caracteres (para eso sirve reinterpret_cast). Y si, para cuando leas los datos puedes hacerlo relativamente igual :D Es lo bueno de ese código!
En línea

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL
SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: Archivos bINARIOS c++
« Respuesta #4 en: 8 Febrero 2016, 15:37 pm »

O sea que sería mas o menos así,

Código:
#include <iostream>
#include <fstream>
using namespace std;

struct alumno{

string nombre;
string apellido;
int edad;
};

int main () {


alumno alum[50];

ofstream f;

f.open("alumnos.bin", ios::out | ios::binary);
if(f.open){

for (int i=0; i<=50; i++){

cout<<"Teclee el nombre del alumno"<<endl;
cin>>alum[i].nombre
cout<<"Teclee  el apellido"<<endl;
cin>>alum[i].apellido;
cout<<"Teclee  la edad"<<endl;
cin>>alum[i].edad;
f.write(reinterpret_cast<const char*>(&alum[i]), sizeof(alumno);
}

}
else {
cout<<"Error al abrir el archivo"<<endl;
}
is.close();


return 0;
}
lo pondría despues que hayan introducidos los datos, o antes para que se vaya guardando la información?



Me da un error cuando hago eso, justo en esa linea me dice     f.write(reinterpret_cast<const char*>(&alum), sizeof(alumno);
alumnos.cpp:37:62: error: name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]
alumnos.cpp:37:62: note: (if you use '-fpermissive' G++ will accept your code)

no entiendo porque ese error
Código:
#include <iostream>
#include <fstream>
using namespace std;

struct alumno
    {
        string nombre;
        string  apellido;
        int edad;
 };


int main () {

alumno alum[50];
ofstream archivosalida("alumno.bin",  ios::out | ios::binary);
if (!archivosalida){
cerr<<"No se pudo abrir correctamente"<<endl;

} //sale del programa si no se abrio correctamente
    for (int i=0; i<50; i++)
    {
                cout << "Teclee el nombre: " << i << endl;
                 cin >> alum[i].nombre;
cout<<"teclee el apellido : "<<i <<endl;
cin>> alum[i].apellido;
cout<<"teclee la edad : "<<i <<endl;
cin>> alum[i].edad;




    }
 
   archivosalida.write(reinterpret_cast<const char*>(&alum[i]), sizeof(alumno));
   archivosalida.close();
   
   



return 0;
}
« Última modificación: 8 Febrero 2016, 17:16 pm por Eternal Idol » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Archivos bINARIOS c++
« Respuesta #5 en: 8 Febrero 2016, 17:16 pm »

El ambito de la variable i es el bucle unicamente.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: Archivos bINARIOS c++
« Respuesta #6 en: 8 Febrero 2016, 18:11 pm »

Ya lo he solucionado, ahora me da un problema cuando quiero leer lo que esta en el archivo

Código:
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
using std::exit;

struct alumno{

string nombre;
string apellido;
int edad;
};

int main () {

int i;
alumno alum[50];

ofstream f;

f.open("alumnos.bin", ios::out | ios::binary);
if(f.open){

for (i=0; i<=50; i++){

cout<<"Teclee el nombre del alumno"<<endl;
cin>>alum[i].nombre
cout<<"Teclee  el apellido"<<endl;
cin>>alum[i].apellido;
cout<<"Teclee  la edad"<<endl;
cin>>alum[i].edad;
f.write(reinterpret_cast<const char*>(&alum[i]), sizeof(alumno);
}

}
else {
cout<<"Error al abrir el archivo"<<endl;
exit(1);
}
is.close();


//leemos el archivo

ifstream fe("alumnos.bin", ios::in | ios::binary);
if (fe){
cerr<<"Se abrio correctamente"<<endl;
}
else {
cout<<"No se abrio correctamente"<<endl;
exit(1);
}
while (fe && !fe.eof()){
for (i=0; i<=50; i++){

cout<<"Teclee el nombre del alumno"<<endl;
cin>>alum[i].nombre
cout<<"Teclee  el apellido"<<endl;
cin>>alum[i].apellido;
cout<<"Teclee  la edad"<<endl;
cin>>alum[i].edad;

fe.read( reinterpret_cast< const char* >( &alum[i] ), sizeof(alumno));
}//fin del while


return 0;
}
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Archivos bINARIOS c++
« Respuesta #7 en: 8 Febrero 2016, 18:14 pm »

Ya lo he solucionado, ahora me da un problema cuando quiero leer lo que esta en el archivo

Bien pero no escribas mensajes consecutivos, edita tu mensaje anterior y si vas a estar probando diferentes cosas no escribas hasta que hagas la ultima prueba, no nos vayas dando una actualizacion paso por paso por favor.



Ahora lee lo que te dijo class_OpenGL en su primer mensaje en el hilo.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
SojatDotar

Desconectado Desconectado

Mensajes: 40


Ver Perfil
Re: Archivos bINARIOS c++
« Respuesta #8 en: 8 Febrero 2016, 18:19 pm »

Listo problema solucionado!! muchas gracias a todos por su ayuda
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Archivos bINARIOS c++
« Respuesta #9 en: 8 Febrero 2016, 21:28 pm »

Ahora estaría bien que, para el resto de la gente con un problema similar al tuyo, expusieras el código al que has llegado.
En línea

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

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Archivos Binarios
Programación Visual Basic
David Vans 5 2,281 Último mensaje 14 Octubre 2006, 19:32 pm
por Nymphetaminito
Archivos binarios en VB6???
Programación Visual Basic
Bb-7 1 3,974 Último mensaje 10 Abril 2008, 17:26 pm
por krackwar
Archivos Binarios
Programación Visual Basic
TheGhost(Z) 0 1,693 Último mensaje 21 Agosto 2010, 16:24 pm
por TheGhost(Z)
archivos binarios
Programación C/C++
marcico 0 1,665 Último mensaje 26 Julio 2012, 14:14 pm
por marcico
[?] Archivos Binarios
Programación C/C++
MeCraniDOS 3 3,040 Último mensaje 20 Octubre 2013, 15:05 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines