Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


8.11. Leer bloques de datos de un fichero binario

Leer byte a byte puede ser cómodo, pero también es lento. Por eso, en la práctica es más habitual leer grandes bloques de datos. Típicamente, esos datos se guardarán como un array de bytes.

Para eso, dentro de la clase "FileStream" tenemos método "Read", que nos permite leer una cierta cantidad de datos desde el fichero. Le indicaremos en qué array guardar esos datos, a partir de qué posición del array debe introducir los datos (no la posición en el fichero, sino en el array, de modo que casi siempre será 0, es decir, al principio del array), y qué cantidad de datos se deben leer. Nos devuelve un valor, que es la cantidad de datos que se han podido leer realmente (porque puede ser menos de lo que le hemos pedido, si hay un error de lectura o si hemos llegado al final del fichero).

// Ejemplo_08_11a.cs
// Ficheros binarios: lectura por bloques de un FileStream
// Introducción a C#, por Nacho Cabanes

using System;
using System.IO;

public class Ejemplo_08_11a
{
    public static void Main()
    {
        Console.WriteLine("Introduzca el nombre del fichero");
        string nombre = Console.ReadLine();

        FileStream fichero = File.OpenRead(nombre);
        byte[] datos = new byte[10];
        int posicion = 0;
        int cantidadALeer = 10;
        int cantidadLeida = fichero.Read(datos, posicion, cantidadALeer);

        if (cantidadLeida < 10)
            Console.WriteLine("No se han podido leer todos los datos!");
        else 
        {
            Console.WriteLine("El primer byte leido es {0}", datos[0]);
            Console.WriteLine("El tercero es {0}", datos[2]);
        }
        fichero.Close(); 
    }
}

Ejercicios propuestos:

Ejercicio propuesto 8.11.1: Abre un fichero con extensión EXE y comprobar si realmente se trata de un ejecutable, mirando si los dos primeros bytes del fichero corresponden a una letra "M" y una letra "Z", respectivamente. Debes leer ambos bytes a la vez, usando un array.
Ejercicio propuesto 8.11.2: Abre una imagen BMP (cuyo nombre introducirá el usuario) y comprueba si realmente se trata de un fichero en ese formato, mirando si los dos primeros bytes del fichero corresponden a una letra "B" y una letra "M", respectivamente. Usa "Read" y un array.
Ejercicio propuesto 8.11.3: Abre una imagen GIF y comprueba si sus tres primeros bytes son las letras G, I, F. Guarda los 3 datos en un array.
Ejercicio propuesto 8.11.4: Abre una imagen en formato BMP y comprueba si está comprimida, mirando el valor del byte en la posición 30 (empezando a contar desde 0). Si ese valor es un 0 (que es lo habitual), indicará que el fichero no está comprimido. Deberás leer toda la cabecera (los primeros 54 bytes) con una sola orden.