Está en la página 1de 3

Introduccin al manejo de archivos en C++

INTRODUCCION
En trabajos prcticos anteriores desarrollamos programas que manipulaban datos mientras el programa estuviese en ejecucin. Esto es, cuando finalizaba la ejecucin del programa, los datos se perdan. La solucin para hacer que los datos persistan de una ejecucin a otra es almacenarlos en un archivo o fichero en el disco rgido (o en un medio de almacenamiento permanente). De esta forma, cada vez que se ejecuta la aplicacin que trabaja con esos datos, podr leer del archivo los datos que necesite y manipularlos.

ARCHIVO
Un archivo es una coleccin de datos relacionados entre s, que se almacenan como una unidad bajo un solo nombre. Es la nica estructura que no se almacena en memoria principal (RAM), sino que se almacena en memoria externa (DISCOS). Es una estructura dinmica, es decir que su tamao puede variar, no es necesario conocerlo de antemano y est limitado slo por la capacidad de almacenamiento del dispositivo.

FLUJOS
La comunicacin entre un programa y un archivo se realiza mediante un flujo (stream, en ingls). Un flujo es un objeto (como un canal) que hace de intermediario entre el programa y el archivo de informacin. El programa leer o escribir en el flujo sin importar desde donde viene la informacin o a donde va y tampoco importa el tipo de los datos que se leen o escriben, detalles que se delegan al flujo. Archivo Flujo (Buffer) Programa

La biblioteca estndar de C++ trae definida una coleccin estndar de clases (entendidas desde la concepcin de la POO = Programacin Orientada a Objetos) que soportan algoritmos para leer y escribir archivos. Por ejemplo: La clase fstream permite leer o escribir datos de un archivo. La clase ifstream permiten definir flujos de entrada de datos vinculados a un archivo. La clase ofstream permiten definir flujos de salida vinculado a un archivo.

ESCRIBIR Y LEER EN UN ARCHIVO


Sin darnos cuenta, en todos los programas escritos hasta el momento, los datos fueron ledos desde el teclado a travs del flujo CIN utilizando su operador >> y mostrados en pantalla a travs del flujo COUT utilizando su operador <<.

Clases = Tipo de Objeto donde se declara los atributos del objeto (a travs de estructuras de datos predefinidas en el lenguaje de programacin) + las funciones (o mtodos) que describen el comportamiento de dicho tipo de objeto y a travs de las cuales es la nica forma de manipular la informacin almacenada en dicho tipo de objeto.

Flujo CIN >> Teclado >>>>>>>>>>>>>>>>>>>>>>>> Programa Pantalla <<<<<<<<<<<<<<<<<<<<<<<< Flujo COUT << Anlogamente se puede utilizar el operador >>con un flujo de la clase ifstream para leer datos desde un archivos y el operador << con un flujo de la clase ofstream para escribir datos en un archivo. Para utilizar la funcionalidad proporcionada por estas clases debemos incluir la librera de cabecera en el programa. #include<fstream>

Escribir datos en un archivo Para escribir datos en un archivo almacenado en el disco debemos utilizar el flujo ofstream. El siguiente programa define varias variables de distintos tipos tpicos, las inicializa con valores ingresados por el usuario y luego las graba en un archivo llamado datos.dat; mientras que el usuario as lo desee.
#include<iostream> // Biblioteca estndar para clases de Entrada y salida de datos. #include<fstream> // Biblioteca estndar para clases de Entrada/Salida de archivos. #include<string> // Biblioteca estndar para clases de Manipulacin de cadenas. using namespace std; int main() { // zona de declaracin de variables globales del programa principal. char letra, rta; int entero; double real; string cadena; ofstream canal_grabacion; // Declaracin del flujo de salida o grabacin de datos. // canal_grabacion es un objeto de la clase ofstream. // Abrir un archivo para escribir en l. canal_grabacion.open("datos.dat"); // Verificar si ocurri un error. if(canal_grabacion.good()==false) { cout<<"Error: No se pudo abrir el archivo para escribir\n"; } else { rta='s'; // Condicin para seguir grabando mientras que el usuario quiera. while(rta=='s') { // El usuario inicializa las variables. cout<<"Ingrese una letra: "; cin>>letra; cout<<"Ingrese un entero: "; cin>>entero; cout<<"Ingrese numero real: "; cin>>real; cout<<"Ingrese una cadena de letras: "; //Mtodos para ingresar strings. cin.ignore(); getline(cin, cadena);

// Escribir los canal_grabacion canal_grabacion canal_grabacion canal_grabacion

datos en el archivo. << letra << endl; << entero << endl; << real << endl; << cadena << endl;

// Pregunta si el usuario quiere seguir grabando registros. cout<<"Desea escribir ms datos [s/n]: "; cin>>rta; } // Cerrar el archivo. canal_grabacion.close(); } system("pause"); return 0; }

En el ejemplo anterior: La sentencia ofstream llamado canal_grabacin.


canal_grabacion; define un flujo de salida/grabacin

La sentencia canal_grabacion.open(datos.dat); es un mtodo (o funcin de la clase predefinida en el lenguaje C++) y abre el flujo canal de grabacin para una operacin de escritura/grabacin y lo asocia el archivo llamado datos.dat el cual se almacena en el disco. Si el archivo no existe se crea y si ya existe destruye su contenido para iniciar una nueva sesin de escritura. Para escribir los datos en el archivo se puede utilizar el operador << del flujo archivo. Para facilitar la lectura de los datos desde el archivo, cada dato va separado del siguiente por endl. canal_grabacion <<letra <<endl; canal_grabacion <<entero <<endl; canal_grabacion <<real <<endl; canal_grabacion <<cadena <<endl; La sentencia canal_grabacion.close(); cierra el archivo asociado con el flujo dando por finalizado el trabajo con el mismo.

Una vez ejecutado el programa se puede ver en la carpeta, donde se almacena el programa, un archivo de nombre datos.dat creado. Se puede abrir el archivo con un editor de texto y ver su contenido, puesto que se trata de un archivo de texto.