sábado, 13 de diciembre de 2008

Resumen [FLUJOS]

Sabemos que la comunicación entre un programa y el origen o el destino de cierta información, se realiza mediante un flujo de información(Stream) que no es más que un objeto que hace de intermediario entre el programa, y el origen o el destino de la información.
Este nivel de abstracción hace que un programa no tenga que saber nada del dispositivo, lo que se traduce en una facilidad más a la hora de escribir programas, ya que los algoritmos para leer y escribir datos serán siempre más o menos los mismos.
(System.IO) de la biblioteca .NET contiene una colección de clases que soportan estos algortimos.
(FileStream) subclase de Stream permite escribir o leer datos de un fichero.
(StreamWriter y StreamReader) subclases de TextWriter y TextReader, permiten escribir y leer los caracteres.
(BinaryReader y BinaryWriter) permiten leer y escribir datos de cualquier tipo primitivo en binario y cadenas de caracteres.

ABRIENDO FICHEROS PARA ACCESO SECUENCIAL

El tipo de acceso a un fichero de datos es secuencial. Un fichero abierto para "acceso secuencial" es un fichero que puede almacenar resgistros de cualquier longitud. Cuando la información se escribe resgistro a resgitro, estos son colocados uno a continuación de otro, y cuando se lee, se empieza por el primer registro y se continúa al siguiente hasta alcanzar el final.
Este tipo de acceso se utiliza con ficeros de texto en los que se escribe toda la información desde el principio hasta el final y se lee de la misma forma. Los ficheros de texto no son apropiados para almacenar grandes series de números, porque cada número es almacenado como una secuencia de bytes.

Flujos de bytes

Los datos pueden ser escritos o lídos de un fichero byte a byte utilizando un flujo de la clase "FileStream"

FileStream
Un flujo de la clase FileStream perimte leer y escribir bytes en un fichero.

FileStream(string nombre, FileMode modo)
FileStream(string nombre, FileMode modo, FileAccess acceso)

El primer constructor abre un flujo de entrada y salida (para leer y escribir), el segundo hace lo mismo, pero con la posibilidad de especificar el tipo de acceso (leer, escribir, o leer y escribir).
Ele parametro "nombre" es una cadena de caracteres que especifica la ruta donde está guardado o se guardará el fichero.

"C:\\temp\\doc.txt"
@"C:\\temp\\doc.txt"

El parámetro "modo", del tipo enumerado FileMode, puede tomar uno de los valores siguientes:

CreateNew Crear un nuevo fichero.
Create Crear fichero. Si el fichero existe será sobreescrito.
Open Abrir un fichero existente.
OpenOrCreate Abrir un fichero si existe; si no, se crea un nuevo fichero.
Truncate Abrir un fichero existente.Una vez abierto, el fichero será truncado a cero bytes de longitud.
Append Abrir un fichero para añadir datos al final del mismo si existe, o crear un nuevo fichero si no existe.

El parámetro "acceso", del tipo FileAccess, puede tomar uno de lo siguientes valores:
Read Permite acceder al fichero para realizar operaciones de lectura.

ReadWrite Permite acceder al fichero para realizar operaciones de lectura y escritura.

Write Permite acceder al fichero para realizar operaciones de escritura.

Tipos de caracteres

Los datos pueden ser escritos o leídos de un fichero carácter en un formato portable, utilizando flujos de las clases "StreamWriter y StreamReader", subclases de "TextWriter y TextReader".

StreamWriter

Un flujo de la clase StreamWriter permite escribir caracteres en un fichero.

StreamWriter(string nombre)
StreamWriter(Stream flujo)

El primer constructor abre un flujo de salida (para escribir) hacia el fichero especificado por "nombre" (ver la clase FileStream), 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 clases soportan la manipulación del nombre de un fichero o de un directorio que puede existir en el sistema de ficheros de la máquina, sus métodos permitirán interrogar al sistema sobre todas las características de ese fichero. Todos los métodos de estas clases son "static" para que puedan ser invocados sin necesidad de que exista un objeto de ellas.

"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

Datos de tipos primitivos (Bool, Byte, Double, Float, Long, Int, Short, etc).
Para estos casos, el espacio de nombres "System.IO" proporciona las clases "BinaryReader y BinaryWriter", las cuales permiten leer y escribir, respectivamente, datos de cualquier tipo primitivo en formto binario, y cadenas de carácteres en formato "utf_8".
Un flujo BinaryReader sólo puede leer datos almacenados enun fichero a través de un flujo BinaryWriter.

BinaryWriter

Un flujo de la clase BinaryWriter perimte a una aplicación escribir datos de cualquier tipo primitivo. Se puede crear un flujo de esta clase utilizabdo 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 leer datos de cualquier tipo primitivo escritos por un flujo de la clase BinryWriter.

BinaryReader(Stream flujo)

Este constructor abre un flujo de entrada (para leer) desde el fichero vinculado con otro flujo existente de la clase Strem o de sus derivadas.

No hay comentarios: