5.1.6 UTILIZACION DE LAS CLASES IO
Existen tres clases para manejar ficheros: ifstream, ofstream y fstream. La
primera está orientada a ficheros de entrada, la segunda a ficheros de salida,
y la tercera puede manejar cualquiera de los dos tipos o ficheros de entrada y
salida.
El constructor está sobrecargado
para poder crear streams de varias maneras:
ifstream();ifstream(const char *name, int mode = ios::in, int = filebuf::openprot);
El primero sólo crea un stream de
entrada pero no lo asocia a ningún fichero. El segundo lo crea, lo asocia al
fichero con el nombre "name" y lo abre.
Los parámetros son: el nombre del
fichero, el modo, que para ifstream es ios::in por defecto. El tercer parámetro
se refiere al buffer, y no nos preocupa de momento.
Lo mismo pasa con ofstream, salvo
que los valores por defecto de los parámetros son diferentes:
ofstream();ofstream(const char *name, int mode = ios::out, int = filebuf::openprot);
fstream();fstream(const char *name, int mode = ios::in, int = filebuf::openprot);
Todas estas clases disponen además
del método "open", para abrir el fichero a lo largo de la ejecución
del programa.
void open(const char *name, int mode, int prot=filebuf::openprot);
"name" es el nombre del
fichero, mode es el modo en que se abrirá, puede ser uno o una combinación del
tipo enumerado open_mode, de la clase "ios":
enum open_mode { in, out, ate, app, trunc, nocreate, noreplace, binary };
Cada uno de los valores se pueden
combinar usando el operador de bits OR (|), y significan lo siguiente:
Los tres últimos modos
probablemente no son estándar, y es posible que no existan en muchos
compiladores.
void close();
Sencillamente, cierra el fichero
asociado a un stream.
Igual que sucede con el stream
estándar cout, el operador de flujo de salida >> se puede usar con
streams de salida cuando trabajemos con texto.
Del mismo modo, al igual que sucede
con el stream estándar cin, el operador de flujo de entrada << se puede
usar con streams de entrada cuando trabajemos con texto.
ostream& put(char ch);
Sirve para cualquier stream de
salida, e inserta un carácter en el stream.
int get();istream& get(char*, int len, char = '\n');istream& get(char&);istream& get(streambuf&, char = '\n');
La primera forma no se recomienda y
se considera obsoleta, lee un carácter desde el stream de entrada.
La segunda lee caracteres y los
almacena en el buffer indicado en el primer parámetro hasta que se leen
"len" caracteres o hasta que se encuentra el carácter indicado en el
tercer parámetro, que por defecto es el retorno de línea.
La tercera forma extrae un único
carácter en la referencia a char proporcionada.
La cuarta no nos interesa de
momento.
istream& getline(char*, int, char = '\n');
Extrae caracteres hasta que se
encuentra el delimitador y los coloca en el buffer, elimina el delimitador del
stream de entrada y no lo añade al buffer.
Método eof:
int eof();
Verifica si se ha alcanzado el
final del fichero, devuelve un valor nulo si no es así.
void clear(iostate state=0);
Cada vez que se produzca una
condición de error en un stream es necesario eliminarla, ya que en caso
contrario ninguna operación que se realice sobre él tendrá éxisto. Por ejemplo,
si llegamos hasta el final de fichero, el stream quedará en estado
"eof" hasta que se elimine explícitamente ese estado. Eso se hace
mediante el método "clear", sin parámetros dejará el estado en 0, es
decir, sin errores.
Los estados posibles se definen en
un enumerado:
enum io_state { goodbit, eofbit, failbit, badbit };
int bad();
Devuelve el estado del bit
"badbit".
int fail();
Devuelve el estado del bit
"failbit".
int good();
Devuelve el estado del bit
"goodbit".
Ejemplo:
Veamos el ejemplo anterior de
mostrar dos veces un fichero, pero esta vez escrito para C++ usando streams:
// ejemplo1.cpp: Muestra un fichero dos veces.
#include <iostream>#include <fstream>using namespace std; int main() { ifstream fichero("ejemplo1.cpp"); char c; while(fichero.get(c)) cout.put(c); fichero.clear(); // (1) fichero.seekg(0); while(fichero.get(c)) cout.put(c); fichero.close(); cin.get();return 0;
}
Como vemos en (1), es necesario
eliminar el bit de eof, que se ha activado al leer hasta el final del fichero,
cuando el último intento de llamar a "get" ha fallado, porque se ha
terminado el fichero.
int is_open();
Devuelve un valor no nulo si el
fichero está abierto.
ostream& flush();
Realiza las operaciones de
escritura pendientes que aún se han realizado sólo en el buffer.
Un ejemplo en el uso de las clases de información es cuando queremos obtener la
información de cierto archivo, para lo cual debemos de seguir los siguientes
pasos:
- Crear un nuevo objeto de tipo FileInfo, incluyendo el path en el cual se
encuentra el archivo
- Acceder a las propiedades del objeto FileInfo que acabamos de crear:
‘VB
Dim miArchivo As FileInfo = New FileInfo(“c:\boot.ini”)
If miArchivo.Exists Then
Console.WriteLine(“Nombre del Archivo: {0}”, miArchivo.Name)
Console.WriteLine(“Path: {0}”, miArchivo.FullName)
End If
//C#
FileInfo miArchivo = new FileInfo(@“c:\boot.ini”);
If (miArchivo.Exists)
{
Console.WriteLine(“Nombre del Archivo: {0}”, miArchivo.Name);
Console.WriteLine(“Path: {0}”, miArchivo.FullName);
}
System.IO.IsolatedStorage
Artículos que utilizan clases de este espacio de nombres
El espacio de nombres System.IO.IsolatedStorage contiene tipos que permiten la
creación y el uso de almacenes aislados. Con estos almacenes, se pueden leer y
escribir los datos a los que no puede tener acceso el código de menor confianza
y se puede evitar la exposición de información confidencial que puede guardarse
en otro lugar del sistema de archivos. Los datos se almacenan en compartimentos
aislados por el usuario actual y el ensamblado en que existe el código. Además,
los datos pueden aislarse según el dominio. Junto al almacenamiento aislado
pueden utilizarse perfiles móviles, de forma que los almacenes aislados
trabajarán con el perfil del usuario. La enumeración IsolatedStorageScope
indica los distintos tipos de aislamiento. Para obtener más información sobre
cuándo se ha de utilizar el almacenamiento aislado, vea el tema Realizar tareas
de almacenamiento aislado.
La clase System.IO.IsolatedStorage.IsolatedStorageFileClassTopic proporciona
la mayoría de la funcionalidad necesaria para el almacenamiento aislado.
Utilice esta clase para obtener, eliminar y administrar el almacenamiento
aislado. System.IO.IsolatedStorage.IsolatedStorageFileStreamClassTopic controla
la lectura y escritura de archivos en un almacén. Esto es parecido a la lectura
y escritura en las clases de E/S de archivos estándar. Para obtener más
información sobre E/S,
Contenido de System.IO.IsolatedStorage
Las clases, interfaces, estructuras, delegados y enumeraciones que contiene
este espacio de nombres (según la documentación de Visual Studio .NET)
Clases:
· IsolatedStorage Representa la clase base abstracta de la que deben derivarse
todas las implementaciones de almacenamiento aislado.
· IsolatedStorageException Excepción que se inicia cuando una operación del
almacenamiento aislado produce un error.
· IsolatedStorageFile Representa un área de almacenamiento aislado que contiene
archivos y directorios.
· IsolatedStorageFileStream Expone un archivo dentro del almacenamiento
aislado.
Interfaces:
· INormalizeForIsolatedStorage Permite hacer comparaciones entre un almacén
aislado y un dominio de aplicación y evidencia de ensamblado.
Enumeraciones:
· IsolatedStorageScope Enumera los niveles de ámbito de almacenamiento aislado
que IsolatedStorage admite.