Está en la página 1de 3

C++ provee las siguientes clases para realizar operaciones de entrada y salida d e carcteres hacia o desde archivos: ofstream:

El flujo para escribir archivos. ifstream: El flujo para leer archivos. fstream: Flujo de lectura/escritura sobre archivos Estas clases derivan directa o indirectamente de las clases istream y ostream. De hecho ya hemos usado estas dos clases: cin es un objeto de la clase istream y cout es un objeto de la clase ostream. El uso de estas nuevas clases ser exactamente al uso de cin y cout, con la nica di ferencia, de que deberemos asociar estos flujos a archivos fsicos /* Operaciones bsicas de entrada y salida */ #include <iostream> #include <fstream> using namespace std; int main () { ofstream MiArchivo; MiArchivo.open ("ejemplo.txt"); MiArchivo << "Escribe sta lnea en el archivo de ejemplo.\n"; MiArchivo.close(); return 0; } [archivo ejemplo.txt] Escribe sta lnea en el archivo de ejemplo. Este cdigo crea un archivo llamado ejemplo.txt e inserta la lnea dentro de l, de la misma manera que saldra por la salida estandar (generalmente la pantalla) si hub iesemos usado cout. Abrir archivos La primer operacin que se realiza sobre un objeto de una de estas clases es asoci arlo a un archivo fsico. Este procedimiento es conocido como abrir archivo. Un ar chivo abierto es representado como un objeto, la instancia de una estas clases. En el ejemplo anterior el objeto del que hablamos es MiArchivo. Cualquier operacin de entrada/salida sobre el objeto es aplicada al archivo fsico al cual est asociado (en el ejemplo, ejemplo.txt). Para realizar esta apertura utilizamos la funcin miembro de la clase open(archivo , modo);, dnde archivo es una secuencia de carcteres terminada en nulo del tipo c onst char * que representa el nombre del archivo fsico a ser abierto, y mode son una serie de parmetros opcionales que se detallan en la siguiente tabla: ios::in Modo de operaciones de entrada. ios::out Modo de operaciones de salida. ios::binary Opera en modo binario. ios::ate Ubica la posicin inicial al final del archivo, s este parmetro se o mite, la posicin inicial queda al principio del archivo. ios::app Todas las operaciones de salida son realizadas al final del arch ivo, haciendo append (agregar al final). Slo puede usarse en flujos abiertos slo d e salida. ios::trunc Si el archivo abierto para operaciones de salida ya existe fsicam ente, el contenido se borra y ser reemplazado por el nuevo que se introduzca Las opciones de la tabla anterior pueden combinarse utilizando el operador OR ( ). Por ejemplo si quisieramos abrir un archivo de ejemplo, llamado ejemplo.bin en modo binario, para agregar datos al final del archivo, podramos utilizar la s entencia:

ofstream SalidaBinaria; SalidaBinaria.open ("ejemplo.bin", ios::out ios::app ios::binary); Si no se utilizaran argumentos al utilizar la funcin open, los argumentos tomados por defecto segn la clase que instanci al objeto, seran: ofstream ios::out ifstream ios::in fstream ios::in ios::out Para las clases ifstream y ofstream, son asumidos automtica y respectivamente los argumentos, ios::in y ios::out El valor por defecto slo aplica si la funcin es llamada sin ningn argumento especfic o de modo. Si la funcin es llamada con algn argumento, de tipo out o in, el argume nto por defecto se sobrescribe (no se combina). Los flujos abiertos en modo binario realizan operaciones de entrada y salida ind ependientemente del formato. Los archivos no binarios son conocidos como archivo s de texto. Podemos hacer la operacin de apertura mediante el uso del constructor del objeto al momento de instanciarlo, por ejemplo: ofstream MiArchivo ("ejemplo.bin", ios::out ios::app ios::binary); Para verificar que un archivo fue abierto correctamente, podemos utilizar la fun cin miembro de la clase member is_open() que devuelve un valor booleano, true si la apertura fue correcta, false en caso contrario. Por ejemplo: if (MiArchivo.is_open()) { /* operamos con el archivo */ } else { /* manejamos el error */ } Cerrar el archivo Cuando terminemos de usar el archivo debemos cerrarlo, as nuestro programa devolv er el recurso al sistema operativo nuevamente. Para hacerlo nos valemos de la fun cin miembro close(), esta funcin no toma parmetos y lo que hace es terminar de escr ibir todo lo que haya quedado en los buffers y luego cerrar el archivo: MiArchivo.close() Archivos de texto Los flujos de archivos de texto son los que no incluyen el parmetro ios:binary en la apertura del archivo. Estos archivos se usan para almacenar texto y otros va lores como TABULACIONES y carcteres de nueva lnea que tendrn interpretaciones espec iales y no tomados literalmente como en un archivo en modo binario. Las operaciones son las mismas que podemos asociarle al flujo de salida estndar c out: // Escribimos un archivo de TEXTO #include <iostream> #include <fstream> using namespace std;

int main () { ofstream MiArchivo ("ejemplo.txt"); if (MiArchivo.is_open()) { MiArchivo << "Esta es la primer lnea.\n"; MiArchivo << "Esta es la segunda lnea.\n"; MiArchivo.close(); } else cout << "ERROR: No se puedo realizar la apertura del archivo"; return 0; } Veamos ahora como leer lnea a lnea un archivo como el anterior: // Leer un archivo de texto #include <iostream> #include <fstream> #include <string> using namespace std; int main () { string linea; ifstream MiArchivo ("example.txt"); if (MiArchivo.is_open()) { //Mientras que no sea fin de archivo while (! MiArchivo.eof() ) { getline (MiArchivo,line); cout << linea << endl; } MiArchivo.close(); } else cout << "No se pudo abrir el archivo."; return 0; } Este ltimo ejemplo lee el archivo de texto e imprime su contenido en la pantalla. Notar como se llama a la funcin miembro eof() que devuelve verdadero en caso de que se haya alcanzado el fin de archivo. Estado del flujo Adems de eof, hay otras funciones booleanas que nos permiten conocer diferentes e stados del flujo, en la siguiente tabla se resumen: bad() Devuelve verdadero en caso de que una operacin de lectura o escritura fal le sobre el flujo, por ejemplo tratar de leer sobre un archivo sobre el cual no tenemos permiso, o escribir en un disco que no tiene espacio. fail() Hace las mismas comprobaciones que el bad pero adems devuelve verdadero e n caso de que haya un error de formato, como por ejemplo la lectura de un carcter alfabtico en caso de que se esperaba un entero. eof() Devuelve verdadero si en la ltima operacin se leyo el fin de archivo. good() Devuelve falso en el caso de que alguna de las anteriores funciones haya devuelto verdadero. Para resetear los valores de las banderas que devuelven las anteriores funciones podemos utilizar la funcin miembro clear()