You are on page 1of 8

Archivos

Muy a menudo necesitamos almacenar cierta cantidad de datos de forma ms o menos


permanente. La memoria del ordenador es voltil, y lo que es peor, escasa y cara. De
modo que cuando tenemos que guardar nuestros datos durante cierto tiempo tenemos que
recurrir a sistemas de almacenamiento ms econmicos, aunque sea a costa de que sean
ms lentos.
Durante la historia de los ordenadores se han usado varios mtodos distintos para el
almacenamiento de datos. Al principio se recurri a cintas de papel perforadas, despus a
tarjetas perforadas. A continuacin se pas al soporte magntico, empeando por grandes
rollos de cintas magnticas a!iertas.
"asta aqu#, todos los sistemas de almacenamiento e$terno eran secuenciales, es decir, no
permit#an acceder al punto e$acto donde se guarda!a la informacin sin antes ha!er
partido desde el principio y sin ha!er le#do toda la informacin, hasta el punto donde se
encontra!a la que esta!amos !uscando.
%on las cintas magnticas empe lo que con el tiempo ser#a el acceso aleatorio a los
datos. &e pod#a reservar parte de la cinta para guardar cierta informacin so!re la
situacin de los datos, y a'adir ciertas marcas que hicieran ms sencillo localiarla.
(ero no fu hasta la aparicin de los discos magnticos cuando sta tcnica lleg a su
sentido ms amplio. )n los discos es ms sencillo acceder a cualquier punto de la
superficie en poco tiempo, ya que se accede al punto de lectura y escritura usando dos
coordenadas f#sicas. (or una parte la ca!ea de lectura*escritura se puede mover en el
sentido del radio del disco, y por otra el disco gira permanentemente, con lo que
cualquier punto del disco pasa por la ca!ea en un tiempo relativamente corto. )sto no
pasa con las cintas, donde slo hay una coordenada f#sica.
%on la invencin y proliferacin de los discos se desarrollaron los ficheros de acceso
aleatorio, que permiten acceder a cualquier dato almacenado en un fichero en
relativamente poco tiempo.
Actualmente, los discos duros tienen una enorme capacidad y son muy rpidos, aunque
a+n siguen siendo lentos, en comparacin con las memorias ,AM. )l caso de los %D es
algo intermedio. )n realidad son secuenciales en cuanto al modo de guardar los datos,
cada disco slo tiene una pista de datos gra!ada en espiral. &in em!argo, este sistema,
com!inado con algo de memoria ,AM, proporciona un acceso muy pr$imo al de los
discos duros.
)n cuanto al tipo de acceso, en % y %-- podemos clasificar los archivos seg+n varias
categor#as.
/. Dependiendo de la direccin del flujo de datos.
o De entrada. los datos se leen por el programa desde el archivo.
o De salida. los datos se escri!en por el programa hacia el archivo.
o De entrada*salida. los datos pueden se escritos o le#dos.
0. Dependiendo del tipo de valores permitidos a cada !yte.
o De te$to. slo estn permitidos ciertos rangos de valores para cada !yte.
Algunos !ytes tienen un significado especial, por ejemplo, el valor
he$adecimal 1$/A marca el fin de fichero. &i a!rimos un archivo en modo
te$to, no ser posi!le leer ms all de un !yte con ese valor, aunque el
fichero sea ms largo.
o 2inarios. estn permitidos todos lo valores para cada !yte. )n estos
archivos el final del fichero se detecta de otro modo, dependiendo del
soporte y del sistema operativo. La mayor#a de las veces se hace
guardando la longitud del fichero. %uando queramos almacenar valores
enteros, o en coma flotante, o imgenes, etc, de!eremos usar este tipo de
archivos.
3. &eg+n el tipo de acceso.
o Archivos secuenciales. imitan el modo de acceso de los antiguos ficheros
secuenciales almacenados en cintas magnticas y
o Archivos de acceso aleatorio. permiten acceder a cualquier punto de ellos
para realiar lecturas y*o escrituras.
4. &eg+n la longitud de registro.
o Longitud varia!le. en realidad, en este tipo de archivos no tiene sentido
ha!lar de longitud de registro, podemos considerar cada !yte como un
registro. 5am!in puede suceder que nuestra aplicacin conoca el tipo y
longitud de cada dato almacenado en el archivo, y lea o escri!a los !ytes
necesarios en cada ocasin. 6tro caso es cuando se usa una marca para el
final de registro, por ejemplo, en ficheros de te$to se usa el carcter de
retorno de l#nea para eso. )n estos casos cada registro es de longitud
diferente.
o Longitud constante. en estos archivos los datos se almacenan en forma de
registro de tama'o contante. )n % usaremos estructuras para definir los
registros. % dispone de funciones de li!rer#a adecuadas para manejar este
tipo de ficheros.
o Mi$tos. en ocasiones pueden crearse archivos que com!inen los dos tipos
de registros, por ejemplo, d2A&) usa registros de longitud constante, pero
a'ade un registro especial de ca!ecera al principio para definir, entre otras
cosas, el tama'o y el tipo de los registros.
)s posi!le crear archivos com!inando cada una de estas categor#as, por ejemplo. archivos
secuenciales de te$to de longitud de registro varia!le, que son los t#picos archivos de
te$to. Archivos de acceso aleatorio !inarios de longitud de registro constante,
normalmente usados en !ases de datos. 7 tam!in cualquier com!inacin menos
corriente, como archivos secuenciales !inarios de longitud de registro constante, etc.
)n cuanto a cmo se definen estas propiedades, hay dos casos. &i son !inarios o de te$to
o de entrada, salida o entrada*salida, se define al a!rir el fichero, mediante la funcin
fopen en % o mediante el mtodo open de fstream en %--.
La funcin open usa dos parmetros. )l primero es el nom!re del fichero que contiene el
archivo. )l segundo es em modo que es una cadena que indica el modo en que se a!rir el
archivo. lectura o escritura, y el tipo de datos que contiene. de te$to o !inarios.
)n %, los ficheros admiten seis modos en cuanto a la direccin del flujo de datos.
r. slo lectura. )l fichero de!e e$istir.
8. se a!re para escritura, se crea un fichero nuevo o se so!rescri!e si ya e$iste.
a. a'adir, se a!re para escritura, el cursor se situa al final del fichero. &i el fichero
no e$iste, se crea.
r-. lectura y escritura. )l fichero de!e e$istir.
8-. lectura y escritura, se crea un fichero nuevo o se so!rescri!e si ya e$iste.
a-. a'adir, lectura y escritura, el cursor se situa al final del fichero. &i el fichero
no e$iste, se crea.
)n cuanto a los valores permitidos para los !ytes, se puede a'adir otro carcter a la
cadena de modo.
t. modo te$to. 9ormalmente es el modo por defecto. &e suele omitir.
!. modo !inario.
)n ciertos sistemas operativos no e$iste esta distincin, y todos los ficheros son !inarios.
)n %-- es algo diferente, el constructor de las clases ifstream, ofstream y fstream admite
los parmetros para a!rir el fichero directamente, y tam!in disponemos del mtodo
open, para poder crear el stream sin asociarlo con un fichero concreto y hacer esa
asociacin ms tarde.
:uente. http.**c.conclase.net*ficheros*inde$.php
C++
Escribir Informacin a un Archivo a Travs del Operador de Insercin (<<)
%uando utilia el cout es un o!jeto del tipo ofstream ;flujo de salida<. =tiliando la clase
ofstream, sus programas pueden realiar la salida a cout ;iostream.h< utiliando el
operador de insercin ;>><. )l archivo de enca!eado fstream.h define una clase para el
flujo de salida hacia archivos llamado ofstream. =tiliando los o!jetos de la clase
ofstream, sus programas pueden realiar la salida a archivos.
&inta$is.
ofstream identificador?salida;@nom!re?archivoA<B
Leer Informacin del Archivo a Travs del Operador de Extraccin ()
%uando utilia el cin es un o!jeto del tipo ifstream ;flujo de entrada<. =tiliando la clase
ifstream, sus programas pueden realiar la entrada a cin ;iostream.h< utiliando el
operador de e$traccin ;CC<. )l archivo de enca!eado fstream.h define una clase para el
flujo de entrada hacia archivos llamado ifstream. =tiliando los o!jetos de la clase
ifstream, sus programas pueden realiar la lectura de archivos.
&inta$is.
ifstream identificador?entrada;@nom!re?archivoA<B
A travs del mtodo getline de un o!jeto ;identificador< del tipo ifstream se puede realiar
la lectura de una l#nea completa del archivo especificado.
&inta$is.
identificador?entrada.getline;varia!le,sieof;varia!le<<B
6tra manera de realiar la lectura de pala!ras o campos de datos de una l#nea del
archivo se puede optar por el uso de la siguiente sinta$is.
identificador?entrada CCvaria!leB
Error de Operacin en Archivos
Ayudar que los programas prue!en la e$istencia de errores, puede utiliar el mtodo
fail del o!jeto archivo. &i no ocurre un error durante una operacin de archivo, la funcin
fail regresar el valor de falso ;1<. &i ocurre un error, sin em!argo, regresar verdadero.
&inta$is.
Df ;identificador.fail; <<
E
cout>>AMensaje de )rrorAB
F
!errar un Archivo
%uando su programa termina, el sistema operativo cerrar todos los programas que
haya a!ierto. %omo regla, sin em!argo, cuando su programa ya no necesite un archivo,
de!er cerrarlo. (ara cerrar un archivo, su programa de!er utiliar la funcin close.
&inta$is.
identificador.close; <B
Modos de Apertura de un Archivo en %--
A continuacin se presentan las especificaciones para los tipos de apertura, seg+n el
tipo de archivo utiliado.
"odo de Apertura #i$nificado
ios..app A!rir un nuevo archivo en el modo de adicin, poniendo el
apuntador del archivo al final del mismo.
ios..in )specifica que el archivo ser a!ierto para meter datos en l.
ios..out )specifica que el archivo ser a!ierto para dar salida a datos.
&inta$is.
ofstream identificador?salida;@nom!re?archivoA,modo?de?apertura<B
ifstream identificador?entrada;@nom!re?archivoA,modo?de?apertura<B
E%E"&LO#
// Programa 1: Almacenar texto en un archivo a travs de un objeto
ofstream.
#include <fstream.h>
#include <conio.h>
void main()
{
ofstream X("curso.txt");
X <<"Aprenda C "<< endl;
X <<"!n"enier#a !nformatica" << endl;
X <<"Codi"o$ %%&'&";
cout <<"Archivo de (alida Creado";
"etch();
)
// Programa 2: Abrir un archivo para adicionar texto al final del mismo.
#include <fstream.h>
#include <conio.h>
void main()
{
char nom*re+'&,;
ofstream -("curso.txt".ios$$app);
cout<<"!n"rese su nom*re$";
cin>>nom*re;
- <<"/nAprenda 0uilder"<< endl;
- <<"!n"enier#a !nformatica" << endl;
- <<"1om*re$"<<nom*re;
cout <<"Archivo de (alida Creado";
"etch();
)
// Programa 3: eer un archivo de texto a travs de un objeto ifstream.
#include <fstream.h>
#include <conio.h>
void main()
{
char linea+'&&,;
ifstream 2("curso.txt");
3hile(42.eof())
{
2."etline(linea.si5eof(linea));
cout << linea << endl;
)
cout <<"/n6a 6ectura del Archivo fue Culminada";
"etch();
2.close();
)
// Programa !: "eterminar si ha ocurrido un error al momento de abrir un
archivo.
#include <fstream.h>
#include <conio.h>
void main()
{
char linea+'&&,;
ifstream 7("nuevo.txt");
if (7.fail())
{
cout<<"8rror al a*rir el archivo nuevo.txt";
)
else
{
3hile(47.eof())
{
7."etline(linea.si5eof(linea));
cout << linea << endl;
)
cout <<"/n6a 6ectura del Archivo fue Culminada";
)
"etch();
7.close();
)
// Programa #: $ncluir datos de una clase en archivos de texto.
#include "iostream.h"
#include "stdio.h"
#include "conio.h"
class persona
{
pu*lic$
persona ( ){codi"o9&;)
void incluir( );
void ultimo:codi"o( );
;persona ( ){ )
private$
char nom+'<,;
int codi"o.edad;
);
void persona$$incluir()
{
=!68 >fptr'9fopen("estudiantes.txt"."a");
codi"o;
"otox?(@.A);cout<<"1om*re $ ";
cin>>nom;
"otox?(@.'&);cout<<"8dad $ ";
cin>>edad;
fprintf(fptr'."BCd B'<s BCd/n".codi"o.nom.edad);
fclose(fptr');
)
void persona$$ultimo:codi"o()
{
=!68 >fptrD9fopen("estudiantes.txt"."r");
if (fptrD991E66)
{
clrscr( );
"otox?(F.'D);
cout<<">>> 1o existe el Archivo.fue creado el archivo
8studiantes.GXG >>>";
fptrD9fopen("estudiantes.txt"."a");
"otox?(D&.'%);cout<<" >> Hresione una Gecla para Continuar >> ";
"etch();
)
else
3hile (4feof(fptrD)) fscanf(fptrD."BdBsBd".Icodi"o.Inom.Iedad);
fclose(fptrD);
)
void main( )
{
int resp;
persona x;
x.ultimo:codi"o();
do
{
clrscr();
"otox?(%'.%);cprintf(" AJK8JAK K8J!(GKL( ");
"otox?(%'.C);cprintf(" >>>>>>>>>>>>>>>>> ");
x.incluir();
"otox?(D&.DD);cout<<">>> Mesea a"re"ar mas datos ((!9'N1L9&)
>>>$";
cin>>resp;
)
3hile(resp);
)
// Programa %: $ncluir datos de una clase en archivos binarios
#include "iostream.h"
#include "stdio.h"
#include "conio.h"
class persona
{
pu*lic$
persona ( ){p.codi"o9&;)
void incluir( );
void ultimo:codi"o( );
;persona ( ){ )
private$
struct datos
{
char nom+'<,;
int codi"o.edad;
)p;
);
void persona$$incluir()
{
=!68 >fptr'9fopen("alumnos.dat"."a*");
p.codi"o;
"otox?(@.A);cout<<"1om*re $ ";
cin>>p.nom;
"otox?(@.'&);cout<<"8dad $ ";
cin>>p.edad;
f3rite(Ip.si5eof(struct datos).'.fptr');
fclose(fptr');
)
void persona$$ultimo:codi"o()
{
=!68 >fptrD9fopen("alumnos.dat"."r*");
if (fptrD991E66)
{
clrscr( );
"otox?(F.'D);
cout<<" >>> 1o existe el Archivo.fue creado el archivo
Alumnos.MAG >>> ";
fptrD9fopen("alumnos.dat"."a*");
"otox?(D&.'%);cout<<" >> Hresione una Gecla para Continuar >> ";
"etch();
)
else
{
3hile (4feof(fptrD)) fread(Ip.si5eof(struct datos).'.fptrD);
cout<<"8l ultimo codi"o asi"nado para los alumnos fue el
numero$"<<p.codi"o;
"etch();
)
fclose(fptrD);
)
void main( )
{
int resp;
persona x;
x.ultimo:codi"o();
do
{
clrscr();
"otox?(%'.%);cprintf(" AJK8JAK K8J!(GKL( ");
"otox?(%'.C);cprintf(" >>>>>>>>>>>>>>>>> ");
x.incluir();
"otox?(D&.DD);cout<<">>> Mesea a"re"ar mas datos ((!9'N1L9&)
>>>$";
cin>>resp;
)
3hile(resp);
)

You might also like