You are on page 1of 16

Raquel Malca

Clase 13-14

Introduccin.
Manipulacin de ficheros.
Organizacin de archivos.
Tipo de almacenamiento.
Biblioteca de flujos.
Operaciones asociadas a archivos:

1.
2.
3.
4.
5.
6.

Abrir Fichero,
Cerrar Fichero,
Lectura y escritura,
Funciones de control.

Manipulacin de Ficheros
En C++, se utilizan streams (flujos) para gestionar la lectura y
escritura de datos. Ya conocemos dos flujos estndar: cin y
cout.
En definitiva abrir un fichero significa definir un stream.
Dicho stream permite la transferencia de datos entre el
programa y el fichero en disco.

stream

Buffer

FICHERO

RAM
El buffer es un rea de memoria situada en la RAM asignada
al programa que abre el archivo.

Manipulacin de Ficheros
Toda transferencia de datos entre el programa y el fichero en
disco se realiza a travs del buffer. El buffer est para dar
eficiencia.
Las operaciones de E/S son ms eficientes:

El acceso a la memoria RAM consume menos tiempo que el acceso


a un dispositivo fsico.
El buffer hace que el nmero de accesos al fichero fsico sea
menor.

El uso del buffer permite realizar operaciones de entrada salida


de forma ms eficiente.

Organizacin de archivos

Nos centramos solo en archivos de


acceso secuencial

Archivos de acceso secuencial: los datos se almacenan de


forma consecutiva y no es posible leer un registro
directamente, es decir para leer el registro n hay que leer
los n-1 registros anteriores.
Archivos de acceso aleatorio: se puede acceder a un
registro concreto sin necesidad de leer todos los anteriores.

Tipo de almacenamiento en Archivos


Nos centramos solo en archivos de texto

Archivos de texto: Los datos se almacenan usando cdigo


ASCII y por tanto, pueden ser procesados por cualquier editor
de texto.
Archivos binarios: Los datos se almacenan en binario.

Biblioteca de Flujos
Para poder manipular archivos, C++ dispone de la biblioteca
estandar fstream (file stream) donde se encuentran todas las
funciones necesarias para abrir y cerrar archivos, as como
para realizar las operaciones de lectura y escritura de datos
en archivos.
# include <fstream.h>

Operaciones asociadas a archivos


-Abrir

fichero

Para entrada o lectura


Para salida o escritura - en modo truncado
- en modo aadir

-Cerrar

fichero

-Lectura

y escritura

-Funciones

de control

Abrir el archivo para aadir datos al final


Si se desea aadir en lugar de reemplazar los datos de un
archivo existente, se debe definir un flujo de salida en modo
append.
ofstream <flujo_salida> (ruta_de_localizacin, ios_base::app);
Los

datos adicionales escritos en el archivo, se aaden en


su extremo final.
Si

el archivo no existe, se crear.


#include <fstream>

ofstream fich_tres (a:\\misdatos.txt, ios_base::app);

Hemos definido el flujo de salida fich_tres en modo aadir.

Advertencia
Antes de seguir adelante, es aconsejable comprobar si el
fichero se ha abierto correctamente, tanto si es para
lectura, escritura.
if (fichero_uno)
cout << Apertura con xito;
else
cout << No se ha podido abrir el fichero;

Una vez definidos los flujos con los que va a trabajar nuestro
programa, se pueden utilizar los operadores de insercin (<<)
y extraccin (>>) y los mtodos ya conocidos de lectura de
datos vistos para los flujos cin y cout.

Cierre de archivos
Cuando el programa ha terminado de manipular el fichero,
ste debe cerrarse. Para cerrar un archivo, basta con
ejecutar la funcin close sobre el flujo asociado al fichero.
Nombre lgico

<nombre_flujo>.close();

#include <fstream.h>

ifstream leer_fich(a:\\misdatos.txt);
ofstream fich_1(a:\\misdatos.txt, ios_base::out);
ofstream fich_dos(a:\\misdatos.txt, ios_base::app);
.
Si un fichero no se cierra, es
leer_fich.close();
cerrado automticamente
fich_1.close();
cuando termina el programa
fich_dos.close();

C++ trata la entrada y salida como flujos. La


entrad ay salida puede ser por consola o
mediante flujo de archivos.
C++ permite manipuladores personalizados
para manejar entrada y salida. Existen dos:
Aquellos

que operan sobre manipuladores de


entrada y,
Aquellos que operan sobre manipuladores de
salida.
Estos manipuladores pueden o no recibir
parmetros.

Para una funcin manipuladora de salida sin


parmetros, se tiene el siguiente formato:
ostream &identifica_manipulador(ostream & flujo)
{ //cuerpo de la funcion manipuladora}

identifica_manipulador: nombre del manipulador.


Note que se devuelve una referencia a un flujo del tipo ostream.

Para una funcin manipuladora de entrada se


tiene el siguiente formato:
istream &identifica_manipulador(istream & flujo)
{ //cuerpo de la funcion manipuladora}

identifica_manipulador: nombre del manipulador.


Note que se recibe un flujo y el flujo es devuelto por el
manipulador.

Ejemplo:
Crear un manipulador de entrada llamado
leerpassword() que emite un sonido y luego
solicita un password.

Ejemplo:
Crear un manipulador de entrada llamado
leerpassword() que emite un sonido y luego
solicita un password.

Escritura de archivos de texto


Escribe un carcter en el flujo de salida.
<flujo_salida>.put : char
void
#include <fstream.h>

ifstream leer_fich(a:\\datos1.txt);
ofstream write_fich(a:\\datos2.txt);

Lee un carcter del flujo


leer_fich.get(car);
de entrada
leer_fich.getline(nombre,20);
Escribe un carcter del
write_fich.put(car);
flujo de salida
.
leer_fich.close();
write_fich.close();

Funciones de control de flujos de archivos


La funcin eof, devuelve un valor distinto de cero si el flujo
de entrada ha alcanzado el final del fichero
<flujo_entrada>.eof :

int

#include <fstream.h>

ifstream leer_fich(a:\\datos.txt);

Mientras no se final de
while(! leer_fich.eof())
fichero
{
leer_fich.getline(nombre,20);
linea ++;
}

leer_fich.close();

Referencias:

Mg. Edgar Ruiz Lizama.