Práctica Nº 14: Ficheros (archivos)

Anuncio
[
]
Informática
PRÀCTICA 6
Curs 2002-2003
Departament d’Informàtica
Departamento de Informática
FACULTAT DE MATEMATIQUES
UNIVERSITAT DE VALENCIA
Práctica Nº 14: Ficheros (archivos)
Objetivos de la práctica:
- Mostrar la manera de utilizar los archivos para almacenar la información.
- Enseñar al alumno la necesidad de seguir unos pasos fijos cuando se trabaja con ficheros (apertura,
procesamiento, cierre).
- Enseñar la necesidad de realizar comprobaciones de que el fichero se ha abierto correctamente cuando
se trabaja con ficheros.
1.1. Ficheros en C++
Incluir previamente la biblioteca “fstream” donde están definidos los tipos de ficheros en C++ y
las operaciones que se pueden realizar sobre ellos:
#include <fstream.h>
Existen dos tipos de ficheros: de entrada (sólo está permitido leer) y de salida (sólo está permitido
escribir datos). Los dos tipos de archivos están identificados en C++ por dos clases diferentes:
ifstream
(Input Stream)
Archivos de entrada (lectura).
ofstream
(Output Stream)
Archivos de salida (escritura).
Declaración de variables:
//entrada identifica a un fichero de lectura.
ofstream salida; //salida identifica a un fichero de escritura.
ifstream entrada;
1.2. Apertura de un fichero
Una vez definida la variable que usaremos para referirnos al fichero con el que vamos a trabajar, y
antes de realizar ninguna otra operación sobre el fichero, lo primero que hay que hacer es abrirlo
mediante open:
entrada.open(“fentrada.dat”);
Abre el fichero cuyo nombre en disco es fentrada.dat y lo asocia a la variable entrada. El
fichero que se abre es un fichero de lectura.
salida.open(“fsalida.dat”);
Abre el fichero cuyo nombre en disco es fsalida.dat y lo asocia a la variable salida. El
fichero que se abre es un fichero de escritura.
Todos los archivos de entrada y salida que nuestros programas usan tienen dos nombres: el
verdadero nombre del archivo (nombre físico) que solo se usa en la llamada a la función open, que
conecta el archivo a un flujo, y el nombre del flujo (nombre lógico) al que queda conectado el archivo y
es el que usaremos en las operaciones de lectura/escritura sobre archivos.
Nombre de archivos como entradas
Podemos abrir un archivo cuyo nombre está guardado en una variable tipo string. Esta técnica
es muy útil para introducir los nombres de los archivos por teclado.
string nombre;
cin >> nombre;
entrada.open(nombre.c_str());
Práctica Nº 14: Ficheros (archivos)
1/3
[
]
Departament d’Informàtica
Departamento de Informática
Informática
PRÀCTICA 6
Curs 2002-2003
FACULTAT DE MATEMATIQUES
UNIVERSITAT DE VALENCIA
Comprobar si un archivo se abrió correctamente
Una llamada a una función open puede fallar por varias razones: si intentamos abrir un fichero de
entrada y no existe dicho fichero, intentamos abrir un fichero de salida y no tenemos permisos de
escritura sobre dicho fichero. En estos casos es posible que no se despliegue un mensaje de error y que
el programa continúe y haga algo inesperado. Por ello, es conveniente después de una llamada a open
comprobar si el fichero no se ha abierto correctamente y si es así terminar la ejecución del programa:
entrada.open(“datos.dat”);
if (!entrada)
{
cout << “No se pudo abrir el fichero de entrada\n”;
exit(1);
}
La instrucción exit(1) termina el programa de inmediato. Esta instrucción está definida en la
biblioteca stdlib, por tanto, necesitamos incluir #include <stdlib.h>.
1.3. Operaciones sobre archivos: lectura/escritura
Leer información de un archivo (lectura): >>, get, getline.
int x;
/*
* Funciona con tipos de datos que permitan la conversión a
* cadena de caracteres.
*/
entrada >> x;
entrada.get(c);
//Sólo funciona con char
string frase;
getline (entrada,frase); // Sólo funciona con string
Escribir información en un archivo (escritura): <<, put
int x;
/*
*Funciona con tipos de datos que permitan la conversión a cadena de
* caracteres.
*/
salida << x;
salida.put(c); //Sólo funciona con char
En las operaciones de escritura en archivos podemos usar los mismos modificadores de formato
que utilizamos en la práctica 3 para mostrar información por pantalla, la única diferencia es que ahora
las funciones de formato las aplicamos sobre el fichero de salida en el que queremos escribir: salida.
Práctica Nº 14: Ficheros (archivos)
2/3
[
]
Departament d’Informàtica
Departamento de Informática
Informática
PRÀCTICA 6
Curs 2002-2003
FACULTAT DE MATEMATIQUES
UNIVERSITAT DE VALENCIA
salida.setf(ios::fixed);
// Escribiremos los números en el fichero salida
// en notación punto fijo.
salida.setf(ios::showpoint);
//Escribiremos siempre con un punto los
// números reales en el fichero salida
salida.precision(2); //Escribir los números reales con 2 decimales en el
//fichero salida.
1.4. Cerrar ficheros
Todos los archivos deben cerrarse cuando el programa haya terminado de obtener entradas del
archivo o de enviar salidas al archivo. Al cerrar un archivo desconectamos su flujo. Los archivos se
cierran con la instrucción close. Observar que la función close no toma argumentos.
entrada.close( );
salida.close( );
1.5. La función eof()
Esta función se utiliza para detectar el final de fichero, “end of file”.
entrada.eof( );
Esta función nos devuelve una expresión booleana: true si hemos llegado al final del fichero y
ya no hay más información para leer, y false en caso contrario.
En el siguiente bucle escribiremos por pantalla toda la información del fichero.
while (! entrada.eof( ))
{
cout << siguiente;
entrada.get(siguiente);
}
Práctica Nº 14: Ficheros (archivos)
3/3
Descargar