Cátedra I Informática Autor I Carlos Bartó 1 UNIDAD 7: ENTRADA/SALIDA DE INFORMACION 1. Objetos y métodos en el flujo de archivos de E/S. • Elementos necesarios: 1. Un archivo; 2. Un objeto de flujo de datos (buffer de almacenamiento intermedio) • Archivos: precios.dat • Objetos de flujo de datos: #include <iostream> //(cin console input) //(cout console output) #include <fstream> // incluye los siguientes: ifstream flujo_entr ofstream flujo_sal • Métodos de flujos de E/S de datos: info.txt prueba.dat (255chars) Métodos de apertura de archivos: flujo_entr.open(“precios.dat”); flujo_entr.open(“c:\\prueba\\archivos\\precios.dat”); Métodos de estado del archivo: flujo_entr.fail()bool flujo_entr.eof() bool flujo_entr.good()bool flujo_entr.bad() bool v v v v si si si si no se abrió con éxito se leyó mas alla de EOF está disponible se lee después EOF Programa: PGM08-01.CPP (PGM07-01 1a ed) Programa: PGM08-01A.CPP (PGM07-01a 1a ed) Programa: PGM08-01B.CPP (PGM07-01b 1a ed) Programa: PGM08-02.CPP Archivos: precios.dat info.txt prueba.dat • Nombres de archivos embebidos en el programa o interactivos: Programa: PGM08-03a.CPP (PGM07-01a 1a ed, strings) • Cerrar un archivo: flujo_entr.close(); // notar ausencia de parámetros Programa: PGM08-03b.CPP (PGM07-01b 1a ed, strings) EJERCICIOS 8.1 página 457 Métodos de fstream: son de entrada y salida genérica Declaración de tipo flujo: fstream nombreFlujo; La función miembro open de fstream requiere los parámetros nombre_archivo y ios::modo: flujo_entr.open(nombre_archivo, ios::modo); 1 Cátedra I Informática Autor I Carlos Bartó ios::in (entrada) ios::out (salida) ios:app (anexar); ios::ate (at end) ios::binary (binario) ios::trunc (elimina el contenido si existe) ios::nocreate (si existe falla para entrada) ios::noreplace (si existe falla para salida) 2 EJERCICIOS 8.1 página 457 2. Lectura y escritura de arhivos basados en caracteres. • Formateo de los flujos de salida de un archivo #include <iomanip> flujo_sal << “cadena1” << “cadena2”; Programa: PGM08-04.CPP (PGM07-02 1a ed, strings) Lectura de un archivo de texto: flujo_entrada >> variable1 >> variable2 >> .. ; Lectura de un archivo de texto con funciones miembro de fstream .get() Devuelve el siguiente caracter como int. .get(charVar) Extrae el siguiente caracter y lo asigna .putback(expresionChar) Devuelve un caracter en el flujo de entrada y no altera el archivo. .getline(strObj, caracter_terminacion) Extrae caracteres del flujo de entrada hasta que se encuentra con el caracter de teminación y los asigna a strObj. Devuelve un booleano. getline(objeto Archivo,strObj, caracter_terminacion) Es similar a la anterior pero es una función y no un miembro de la clase fstrean. .peek() devuelve el siguiente caracter sin extraerlo. .ignore(int n) Salta los siguientes n caracteres. Escritura de un archivo de texto con funciones miembro de fstream .put(expresionChar) Pone el caracter en el flujo de salida. Programa: Programa: Programa: Programa: PGM08-05.CPP PGM08-05A.CPP PGM08-06.CPP PGM08-06A.CPP (PGM07-03 (PGM07-03 (PGM07-04 (PGM07-04 1a 1a 1a 1a ed) ed, strings) ed, strings) ed) EJERCICIOS 8.2 página 468 2 Cátedra I Informática Autor I Carlos Bartó 3 3. Excepciones y comprobación de archivos. • try - throw- catch(valor arrojado): try { // una o más instrucciones // al menos una de las cuales deberá // lanzar una excepción(trhow excepcion). } catch(tipos_de_dato_excepcion nombre_parámetro) { // una o más instrucciones } Programa: PGM08-07.CPP • Probar que un archivo se abrió con éxito: Programa: PGM08-08.CPP • Archivos abiertos simultáneamente para respaldo con try-catch Programa: PGM08-09.CPP EJERCICIOS 8.3 página 480 4. Archivos de acceso aleatorio. Funciones de marcadores de posición del archivo: .seekg(desplazamiento, modo) Para archivos de entrada se mueve a la posición de desplazamiento indicada por el modo. Modos: ios::beg Posicion de desplazamiento desde inicio ios::cur Posicion de desplazamiento desde actual ios::end Posición de desplazamiento desde final .seekp(desplazamiento, modo) Para archivos de salida se mueve a la posición de desplazamiento indicada por el modo. .tellg(void) Para archivos de entrada devuelve el valor actual del marcador de posición. .tellp(void) Para archivos de salida devuelve el valor actual del marcador de posición. Programa: PGM08-10.CPP (PGM07-05 1a ed, strings) EJERCICIOS 8.4 página 483 3 Cátedra I Informática Autor I Carlos Bartó 4 5. Flujos de archivos como argumentos de funciones. Void inOut(ofstram&) // los flujos se pasan por // referencia Programa: PGM08-11.CPP (PGM07-06 1a ed, strings) Programa: PGM08-11A.CPP (PGM07-06 1a ed) Programa: PGM08-12.CPP (PGM07-07 1a ed, strings) EJERCICIOS 8.5 página 487 4