Archivos en C#
Un archivo o un fichero es una colección de información que almacenamos en un soporte magnético para poderla manipular en cualquier momento. Esta información se almacena como un conjunto de registros, los cuales contienen, generalmente, los mismos campos. Cada campo almacena un dato de un tipo predefinido o de un tipo definido por el usuario.
Un ejemplo seria, si quisiéramos almacenar en un fichero los datos relativos a la agenda de teléfonos, podríamos diseñar cada registro con los campos nombre, dirección y teléfono. Cada campo almacenara el dato correspondiente. El conjunto de campos descritos forma lo que hemos denominado registro, y el conjunto de todos los registros forma un archivo que almacenamos.
Entonces para manipular un archivo que identificamos por un nombre, son tres: abrir el fichero, escribir o leer registros del fichero y cerrar el fichero.
Podemos agrupar los archivos en dos tipos: de la aplicación y de datos, y además ofrece dos tipos diferentes de acceso a los archivos de datos: secuencial y aleatorio.
Para dar soporte a los archivos la biblioteca de C# proporciona varias clases de entrada y salida que permiten leer y escribir datos desde archivos y dispositivos.
Abriendo ficheros para acceso secuencial
El tipo de acceso simple a un archivo de datos es el secuencial, un archivo abierto para esta es un archivo que puede almacenar registros de cualquier longitud. Cuando la información se escribe registro a registro, estos son colocados de uno en uno y cuando se leen se empieza por el primero y se continúa hasta el último.
Este acceso utiliza dos archivos de texto en los que se escribe información desde el principio hasta el final y se lee igual que el secuencial. En cambio los archivos de texto no son los mas apropiados para almacenar grandes series de números porque cada numero es almacenado como una secuencia byte.
Flujo de bytes
Los datos puede ser escritos o leídos de un fichero byte a byte usando el FileStream: Este flujo permite leer y escribir bytes en un fichero. Esta clase aparte de los métodos heredados de la clase Stream proporciona los constructores siguientes:
FileStream(string nombre, FileMode modo)
FileStream(string nombre, FileMode modo, FileAccess acceso)
El primer constructor abre un flujo de entrada y salida vinculado con el fichero especificado por nombre, mientras el segundo hace lo mismo, pero con la posibilidad de especificar el tipo de acceso. El parámetro nombre es una cadena de caracteres que especifica la ruta donde esta guardando o se guardara el archivo. Esta cadena se escribe de dos maneras:
“c:\\temp\\doc.txt”
@“c:\temp\doc.txt” (la ventaja de usar @ y comillas es que las secuencias de escape no se procesan)
Flujo de caracteres
Los datos pueden ser escritos o leidos de un fichero carácter a carácter en un formato portable utilizando flujos de las clases StreamWriter y StreamReader, subclases de TextWriter y TextReader, respectivamente.
StreamWriter
Permite escribir caracteres en un fichero, además de los métodos heredados de la clase TextWriter, proporciona los constructores siguientes:
StreamWriter(string nombre)
StreamWriter(Stream flujo))
El primer constructor abre un flujo de salida hacia el fichero especificado por nombre, mientras que el segundo hace lo mismo, pero desde otro flujo existente de la clase Stream o de sus derivadas.
StreamReader
Permite leer caracteres desde un fichero. Esta clase, además de los métodos que hereda de la clase TextReader, proporciona los constructores siguientes:
StreamReader(string nombre)
StreamReader(Stream Flujo)
El primer constructor abre un flujo de entrada desde el fichero especificado por nombre, mientras que el segundo hace lo mismo, pero desde otro flujo existente de la clase Stream o de sus derivadas.
Clases File, Directory y Path
Estas soportan la manipulación del nombre de un fichero o de un directorio que puede existir en el sistema de ficheros de la mquina, sus métodos permitirán interrogar al sistema sobre las características de ese fichero o directorio. Todos los métodos son static para poder ser invocados sin necesidad de que exista un objeto de ellas.
Para referirnos a un fichero o directorio, lo mas sencillo es formar un string a partir de su nombre al que podremos añadir opcionalmente su ruta de acceso.
“c:\\MiDir\\MiFichero.txt”
@“c:\MiDir\MiFichero.txt”
@“c:\MiDir”
“MiDir\\MiSubDir\\MiFichero.txt”
@“MiDir\MiSubDir\MiFichero.txt”
@“MiDir\MiSubDir”
“MiFichero.txt”
“\\\\MiServidor\\MiDirCompartido\\MiFichero.txt”
Flujos de datos de tipos primitivos
Muchas aplicaciones requieren escribir en un fichero datos de tipos primitivos no como cadenas de caracteres sino formato binario para posteriormente recuperarlos. Para estos casos, el espacio de nombre System.IO proporciona las clases BinaryReader y BinaryWriter, las cuales permiten leer y escribir, respectivamente, datos de cualquier tipo primitivo en formato binario y cadenas de caracteres en formato UTF-8. Un flujo BinaryReader solo puede leer datos almacenados en un fichero a través de un flujo BinaryWriter.
BinaryWriter
Un flujo de la clase BinaryWriter permite a una aplicación escribir datos de cualquier tipo primitivo. Se puede crear un flujo de esta clase utilizando el siguiente constructor:
BinaryWriter(Stream Flujo)
Este constructor abre un flujo de salida (para escribir) hacia el fichero vinculado con otro flujo existente de la clase Stream o de sus derivadas.
BinaryReader
Un flujo de la clase BinaryReader permite a una aplicación escribir datos de cualquier tipo primitivo escritos por un flujo de la clase BinaryWriter. Se puede crear un flujo de esta clase utilizando el siguiente constructor:
BinaryReader(Stream Flujo)
Este constructor abre un flujo de salida (para leer) hacia el fichero vinculado con otro flujo existente de la clase Stream o de sus derivadas.
miércoles, 27 de mayo de 2009
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario