Ficheros en C++ fstream Imprimir
Manuales varios - Manuales de Programación
Escrito por Operata   
Pequeña introduccion de acceso a Ficheros en C++ mediante Streams


Ya conocemos la forma usual de manejar la cónsola en C++, mediante los operadores y los streams cin y cout. El acceso a ficheros se realiza de una manera muy similar.

Creación y destrucción de streams a ficheros
Lo primero que hay que hacer es crear un stream a fichero. Las clases ifstream y ofstream representan ficheros para lectura y escritura respectivamente. Una vez construido un stream a través de estas clases, ya podemos acceder al fichero que representan:

ofstream f(“Datos.txt”);
f < < 3;
f < < 3.5;
f < < “Hola”;

El acceso a través de los operadores hace extremadamente cómoda la lectura y escritura de datos de distinto tipo.
El fichero se cierra automáticamente al activarse el destructor del objeto, aunque también puede cerrarse de manera explícita mediante la función miembro close().

ifstream f(“Datos.txt”);
int k;
f > > k;
f.close (); // Cerrar fichero

Si queremos abrir un fichero para lectura y escritura usaremos la clase mas general fstream, aunque en este caso deberemos indicar el tipo de acceso que deseamos realizar mediante las constantes ios.

fstream f(“Datos.txt”, ios::in | ios::out);
int k;
f > > k;
f < < 3;

Indicadores error y fin de fichero Lo primero que hay que hacer es comprobar que el fichero se ha abierto correctamente, esto lo podemos hacer interrogando directamente al objeto:

ifstream f(“Datos.txt”);
int k;
if (!f) throw ErrorApertura;
f > > k;

La función miembro bad() devuelve un valor distinto de cero si se produce algún tipo de problema durante el acceso al fichero (fallos de escritura/lectura, movimiento del puntero de lectura/escritura fuera del rango permitido, etc.).
Finalmente, la función miembro eof() indica si hemos llegado al final del fichero:

ifstream f(“Datos.txt”);
int k;
while (!f.eof ())
{

f > > k;
cout < < k;
}

Movimiento del puntero de acceso al fichero
La función miembro seekg() permite situar el puntero de lectura escritura en la posición que se desee:

ifstream f (“Datos.txt”);
if (!f) throw ErrorApertura;
f.seekg (10, ios::beg);
int k;
f > > k;

Al igual que en la versión existente en la biblioteca estándar de E/S de C, debe indicarse el punto de referencia para calcular el desplazamiento: ios::beg (comienzo), ios::cur (posición actual), ios::end (final).

Otras funciones de lectura
Si se desea leer una línea completa de un fichero de texto, puede usarse la función miembro getline():

ifstream f (“Datos.txt”);
char buf[80];
while (!f.eof ())
{
f.getline (buf, 80);
if (!f.bad ()) // No hay errores
cout < < buf;
}

También es posible realizar lecturas y escrituras de bloques de bytes mediante las funciones read() y write():

struct dato
{
int k;
float f;
};

main ()
{
ifstream f (“Datos”);
dato p;
if (!f)  throw ErrorApertura
f.read ((char *)&p, sizeof (p));
}