Archivos Binarios

Preview:

DESCRIPTION

algoritmos

Citation preview

ARCHIVOS BINARIOS

La información contenida en el archivo no es

legible para el usuario.

El proceso de lectura y escritura es mas rápido,

ya que la grabación en el archivo es

directamente a partir del contenido de la

memoria (no es necesario la conversión).

Un archivo binario ocupa menos espacio en el

disco que un archivo tipo texto.

Este tipo de archivo es menos “vulnerable”.

Todas las funciones vistas en archivo tipo texto

es valido en un archivo binario. A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 1

ARCHIVOS BINARIOS

Para abrir un archivo binario es usa el

manipulador binary en la función open.

Ejemplos:

ofstream file;

fstream arch;

file.open(“costos.dat”,ios:binary);

//Abre el archivo para salida en modo binario

arch.open(“leyes.dat”,ios::out | ios::in | ios::binary);

//Abre el archivo para entrada o salida en modo binario

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 2

OPERADOR REINTERPRET_CAST

C++ proporciona este operador para realizar

conversiones mediante cast no standard o

conversión cast standard.

La sintaxis es la siguiente:

reinterpret_cast <char *>

La misma es utilizada con las instrucciones read y

write.

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 3

LECTURA

Sentencia read

<Nombre Objeto>.read((reinterpret_cast <char *> )&variable,num);

Donde: num, es la cantidad de bytes que lee del archivo y lo

almacena en la variable.

#include <fstream.h>

int main()

{ ifstream f1; char c;

f1.open(“Alfa.dat”,ios::in | ios::binary);

f1.read(&c,sizeof(char));

}

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 4

ESCRITURA

Sentencia wrie <Nombre Objeto>.write((reinterpret_cast <char *> )&variable,num);

Donde: num, es la cantidad de bytes que escribe en el archivo el valor que se encuentra en la direccion de memoria de la variable.

#include <fstream.h>

int main()

{ ifstream f1; char c;

f1.open(“Alfa.dat”,ios::out | ios::binary);

f1.write(&c,sizeof(char));

}

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 5

EJEMPLOS DE APLICACIÓN //Programa para manejo de archivos Binarios

#include <fstream.h>

#include <iostream>

#define T reinterpret_cast <char *>

using namespace std;

const int Max=15;

int main()

{ int i,k; char mFile[Max]="Prueba.dat";

char c; ofstream F1; // Crea el objeto Archi para escritura

F1.open(mFile,ios::binary); // Abre un archivo con un nombre externo

ifstream F2;

if(F1.fail())

{ cout<<"No dispone de suficiente espacio en Disco\n";

exit(1);

}

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 6

CONTINUACION...

else

{ cout<<"El archivo se abrio con exito para escritura\n";

for(i=1;i<=17;i++)

F1.write(T(&i),sizeof(int));

F1.close();

}

F2.open("Prueba.dat",ios::binary); F2.read(T(&k),sizeof(int));

while(!F2.eof())

{ cout<<k<<" ";

F2.read(T(&k),sizeof(int));

}

cout<<endl;

F2.close();

}

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 7

APLICACIÓN DE NOTAS //Programa que almacena los datos de N alumnos y luego lo muestra

#include <fstream.h>

#include <iostream>

#include <stdio.h>

#include <string.h>

#define T reinterpret_cast <char *>

using namespace std;

const int M=15,N=25;

int main()

{ char mFile[M]="NotaBina.dat"; float n1,n2,n3,prom;

char cod[8],ApePat[N],ApeMat[N],Nom[N],obs[11];

ifstream F2; // Crea el objeto Archi para Lectura

ofstream F1; // Crea el objeto Archi para Escritura

F1.open(mFile,ios::binary); // Abre un archivo

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 8

CONTINUACION if(F1.fail())

{ cout<<"El Archivo no se puede abrir con exito\n"

<<"Verifique si el archivo existe"<<endl;

exit(1);

}

cout<<"El archivo se abrio con exito para Escritura\n";

cout<<"Codigo o Enter para finalizar..... ";gets(cod);

for(;strlen(cod)!=0;)

{ cout<<"Apellido Paterno:";gets(ApePat);

cout<<"Apellido Materno:";gets(ApeMat);

cout<<"Nombres :";gets(Nom);

cout<<"Nota 1 :";cin>>n1;

cout<<"Nota 2 :";cin>>n2;

cout<<"Nota 3 :";cin>>n3;

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 9

CONTINUACION...

prom=(n1+n2+n3)/3;

if(prom>10.5)

strcpy(obs,"Aprobado");

else

strcpy(obs,"Desaprobado");

F1.write(T(&cod),sizeof(cod));

F1.write(T(&ApePat),sizeof(ApePat));

F1.write(T(&ApeMat),sizeof(ApeMat));

F1.write(T(&Nom),sizeof(Nom));F1.write(T(&n1),sizeof(n1));

F1.write(T(&n2),sizeof(n2));F1.write(T(&n3),sizeof(n3));

F1.write(T(&prom),sizeof(prom));F1.write(T(&obs),sizeof(obs));

cout<<"Codigo o Enter para finalizar..... ";gets(cod);

}

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 10

CONTINUACION... //Cerrando el archivo

F1.close();

F2.open(mFile,ios::in|ios::binary);

cout<<"Codigo\tApellidos y Nombres\tEvaluaciones\tPromedio\tObserv.\n";

F2.read(T(&cod),sizeof(cod));

while(!F2.eof())

{ F2.read(T(&ApePat),sizeof(ApePat));

F2.read(T(&ApeMat),sizeof(ApeMat));

F2.read(T(&Nom),sizeof(Nom));F2.read(T(&n1),sizeof(n1));

F2.read(T(&n2),sizeof(n2));F2.read(T(&n3),sizeof(n3));

F2.read(T(&prom),sizeof(prom));F2.read(T(&obs),sizeof(obs));

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 11

CONTINUACION...

cout<<cod<<"\t"<<ApePat<<"\t"<<ApeMat<<"\t"<<Nom<<"\t"<<n1<<"\t"

<<n2<<"\t"<<n3<<"\t"<<prom<<"\t"<<obs<<endl;

F2.read(T(&cod),sizeof(cod));

}

//Cerrando el archivo

F2.close();

}

A L G O R I T M O S Y E S T R U C T U R A D E D A T O S 12