Ayuda con Archivos Binarios

Iniciado por mannin87, 12 Junio 2017, 06:35 AM

0 Miembros y 1 Visitante están viendo este tema.

mannin87

Hola amigos alguien que me pueda ayudar con mi codigo no logro guardar el archivo en binario solo en txt si me pueden ayudar a revisar que me hace falta  a mi codigo muchas gracias.




Codigo

Código (cpp) [Seleccionar]
#include "NuevoAlumno.h"
#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <stdio.h>
#include <fstream>
#include <cstring>
#include <string>
#include <conio.h>


using namespace std;


NuevoAlumno::NuevoAlumno()
   {
   //ctor
   }

NuevoAlumno::~NuevoAlumno()
   {
   //dtor
   }

NuevoAlumno::NuevoAlumno(const char * vNombre,const char *vApellido, int vNota1, int vNota2, int vNota3)
   {
   this->nombre = new char[30];
   strcpy(this->nombre, vNombre);
   this->apellido = new char[30];
   strcpy(this->apellido, vApellido);

   this->nota1 = vNota1;
   this->nota2 = vNota2;
   this->nota3 = vNota3;
   }
void NuevoAlumno::AgregarAlumno()
   {
   string nombreArchivo;

   cout<< "Ingrese el nombre del archivo: "<<endl;
   cin>>nombreArchivo;

   ofstream archivo(

       nombreArchivo.data(),
       ios::out| ios::in | ios::binary );

     
   if (!archivo)
       {
       cout<<"Error!!! No se pudo"
           <<"abrir el archivo."
           <<endl;
       system("pause");
       return ;
       }
   int nota1=0;
   int nota2=0;
   int nota3=0;
   char nombre[20];
   char apellido[20];
   float promedio=0;

   int numeroLista;

   cout<<"Ingrese el numero de lista"
       <<" (0 para terminar)"<<endl;
   cin>>numeroLista;
   while(numeroLista > 0)
       {
       cout<<"Ingrese Nombre : ";
       cin>>nombre;
       cout<<"Ingrese Apellido : ";
       cin>>apellido;
       cout<<"Ingrese nota 1: ";
       cin>>nota1;
       cout<<"Ingrese nota 2: ";
       cin>>nota2;
       cout<<"Ingrese nota 3: ";
       cin>>nota3;

       promedio=(nota1+nota2+nota3)/3;
       cout<<"Promedio del Alumno :"<<promedio<<"%";
       cout<<endl;
       cout<<endl;



       archivo<<numeroLista<<" "
              <<nombre<<" "
              <<apellido<<" "
              <<nota1<<" "
              <<nota2<<" "
              <<nota3<<" "
              <<promedio<<endl;

       cout<<"Ingrese numero de lista:"
           <<" (0 para terminar) :";
       cin>>numeroLista;
       }

   archivo.close();

   cout<<"\nOperacion finalizada"
       <<" con exito\n\n";


   }

void NuevoAlumno::MostrarAlumno()
   {
   string nombreArchivo;
   bool encontrado=false;

   cout<<"Ingrese el nombre "
       <<"del archivo  a abrir: ";
   cin>>nombreArchivo;

   ifstream archivo(

                    nombreArchivo.data(),
                ios::in | ios::binary );
     

   if(!archivo)
       {
       cout<<"Error!!! no se pudo"
           <<" abrir el archivo."
           << endl;
       system("pause");
       return ;
       }

   int numeroLista=0;
   char nombre[20];
   char apellido[20];
   float promedio;
   int nota1=0;
   int nota2=0;
   int nota3=0;

   cout<<'\n'
       <<setw(10) << "Numero de Lista: "
       <<setw(20) << "Nombre: "
       <<setw(20) << "Apellido: "
       <<setw(15) << "Nota 1: "
       <<setw(15) << "Nota 2: "
       <<setw(15) << "Nota 3: "
       <<setw(15) << "Promedio: "
       <<fixed << setprecision(2)
       <<endl;
   for(int i=0; i<110; i++)
       cout<<'=';

   cout<<endl;

   archivo>>numeroLista
          >>nombre
          >>apellido
          >>nota1
          >>nota2
          >>nota3
          >>promedio;

   while(!archivo.eof())
       {
       cout<<setw(5)<<numeroLista
           <<left<<setw(15)<<nombre
           <<left<<setw(15)<<apellido
           <<setw(15)<<nota1
           <<setw(15)<<nota2
           <<setw(15)<<nota3
           <<right<<setw(15)<<promedio
           <<endl;

       archivo>>numeroLista
              >>nombre
              >>apellido
              >>nota1
              >>nota2
              >>nota3
              >>promedio;

       }

   archivo.close();
   cout<<"\nOperacion finalizada"
       <<" con exito\n\n";

   system("pause");
   return ;
   }




· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro
-Engel Lex

Serapis

Verás la diferencia entre texto y binario, es que una A tiene el valor 65, luego cuando tu guardas una A se guarda el byte 65, si abres ese fichero luego con un lector de textos, lo que sucede es que cada bytes que tiene una representación gráfica, muestra la representación gráfica de ese byte, así si lee el byte 65, muestra su gráfico asociado "A"...

Entonces lo que tú crees que es o existe una difernecia entre binario y texto, es un concepto errado, no suficientemente claro en tu mente.

Toma un fichero que tu consideras binario (pongamos una canción MP3), cambia la extensión a txt y ábrelo con un visor de texto, verás que muchos bytes serán legibles, concretamente todos los bytes que tienen un gráfico asociado, los que no, pués no se representan...
Igualmente si abres dicho fichero con uin editor hexadecimal, tendrás lo msimo, en la parte 'textual'.

Otra cosa es uno luego codificara un fichero de alguna otra manera, que entonces sería un galimatías incomprensible, pero sólo porque tu escribas "el perro grande come más que el perro pequeño" y lo guardes a fichero, no vayas a pensar que eso no está en binario... sucede que la sucesión de datos binarios, es comprensible a nuestra mente.

Y por tanto la única diferencia real entre texto y binario, es que el texto se puede guardar con 1, 2 o 4 bytes por carácter (esto es 1,2, 4 bytes por byte). Cuando es 1 a 1, es absolutamente binario aunque tu lo abras y lo puedas leer...

Espero haberte abierto un poco tus miras.