La clase FileStream

La clase FileStream

Realiza escritura y lectura de bytes sobre un archivo; en el caso de que el archivo no exista, lo crearíamos al mismo tiempo que instanciamos este objeto.

Uno de los constructores de esta clase, nos permite especificar una cadena con la ruta del archivo a utilizar, mientras que en el segundo parámetro utilizaremos un valor de la enumeración FileMode, mediante la que indicamos el modo de trabajo sobre el archivo: añadir, abrir, crear, etc.

Las propiedades CanRead, CanWrite y CanSeek, devuelven un valor lógico que nos informa de si en el objeto podemos realizar operaciones de lectura, escritura y desplazamiento por los bytes que contiene.

Para escribir datos, disponemos del método WriteByte( ), que escribe un byte en el archivo; y también tenemos el método Write( ), que escribe de un array de bytes pasado como parámetro, una cantidad de elementos determinada empezando por una de las posiciones de dicho array. Veamos un ejemplo de escritura en el Código fuente 416.

' escrituras con Filestream Dim oFileStream As FileStream oFileStream = New FileStream("\pruebas\apuntes.dtt", FileMode.CreateNew)

© Grupo EIDOS 27. Operaciones de entrada y salida (I/O). Gestión del sistema de archivos

oFileStream.Write(New Byte() {15, 160, 88, 40, 67, 24, 37, 50, 21}, 0, 6) oFileStream.WriteByte(75) Console.WriteLine("Opciones en el FileStream") Console.WriteLine("Podemos leer: {0}", IIf(oFileStream.CanRead, "SI", "NO")) Console.WriteLine("Podemos escribir: {0}", IIf(oFileStream.CanWrite, "SI", "NO")) Console.WriteLine("Podemos movernos: {0}", IIf(oFileStream.CanSeek, "SI", "NO"))

oFileStream.Close() oFileStream = Nothing

Código fuente 416

Para las operaciones de lectura, tenemos ReadByte( ), que devuelve el valor sobre el que esté posicionado el objeto en ese momento. También disponemos del método Read( ), que traspasa valores un array de bytes.

Si queremos desplazarnos por los elementos del Stream, podemos utilizar el método Seek( ), pasando la cantidad de posiciones a movernos, y el punto desde el que queremos realizar dicho desplazamiento, mediante los valores de la enumeración SeekOrigin.

Para averiguar el elemento del Stream en el que estamos situados, disponemos de la propiedad Position.

Veamos algunos ejemplos de lectura sobre este tipo de objetos, en el Código fuente 417.

' lectura con FileStream Dim oFileStream As FileStream oFileStream = New FileStream("\pruebas\apuntes.dtt", FileMode.Open) Dim Valor As Byte Valor = oFileStream.ReadByte() ' obtener un valor Console.WriteLine("Se ha leido el valor: {0}", Valor)

Console.WriteLine("Nos desplazamos dos bytes en el stream") oFileStream.Seek(2, SeekOrigin.Begin)

Valor = oFileStream.ReadByte() Console.WriteLine("Se ha leido el valor: {0}", Valor)

Console.WriteLine("La posición actual del stream es: {0}", _ oFileStream.Position)

' leer varios valores, pasándolos a un array ' previamente dimensionado Dim VariosValores(3) As Byte oFileStream.Read(VariosValores, 0, 4)

Console.WriteLine("Leer bloque de valores del stream") Dim Enumerador As IEnumerator Enumerador = VariosValores.GetEnumerator() While Enumerador.MoveNext

Console.WriteLine("Valor: {0}", Enumerador.Current) End While

Console.ReadLine()

Código fuente 417

Programación con Visual Basic .NET © Grupo EIDOS

Las clases BufferedStream y MemoryStream, que también heredan de Stream, disponen de los mismos miembros que FileStream, teniendo como principal diferencia el que utilizan la memoria de la máquina como almacén de respaldo.