AnteriorPosterior

8.10. Leer hasta el final de un fichero binario

  Curso: Programación en C# (2015), por Nacho Cabanes

8.10. Leer hasta el final de un fichero binario

Tenemos dos formas de leer byte a byte todos datos que forma un FileStream. La primera es descubrir el tamaño del fichero, que podemos obtener con ".Length". A partir de entonces, podríamos usar un "for" para recorrer todo el fichero, así:

?// Ejemplo_08_10a.cs
// Ficheros binarios: lectura completa de un FileStream
// Introducción a C#, por Nacho Cabanes
 
using System;
using System.IO;
 
public class Ejemplo_08_10a
{
    public static void Main()
    {
        Console.WriteLine("Introduzca el nombre del fichero");
        string nombre = Console.ReadLine();
        FileStream fichero = File.OpenRead(nombre);
        int count = 0;
        for ( int pos = 0; pos < fichero.Length; pos++)
        {
            byte unDato = (byte) fichero.ReadByte();
            char letra = Convert.ToChar( unDato );
            if (letra == 'A')
                count++;
        }
        Console.WriteLine("Tiene {0} letras A", count);
        fichero.Close();
    }
}
 

(Por simplicidad, este fuente no realiza ningún tipo de comprobación de errores. Lo mismo ocurrirá en la mayoría de fuentes de ejemplo de este tema, pero un programa real sí debería comprobar si el fichero existe y si se ha producido algún error durante la lectura).

La segunda forma de leer hasta el final del fichero es comprobar si el dato leído es un -1. Cuando esto ocurra, será que señal de que se ha llegado al final del fichero. El fuente correspondiente podría ser:

?// Ejemplo_08_10b.cs
// Ficheros binarios: lectura completa de un FileStream
// Introducción a C#, por Nacho Cabanes
 
using System;
using System.IO;
 
public class Ejemplo_08_10b
{
    public static void Main()
    {
        Console.WriteLine("Introduzca el nombre del fichero");
        string nombre = Console.ReadLine();
        FileStream fichero = File.OpenRead(nombre);
        int count = 0;
        int dato;
        do
        {
            dato = fichero.ReadByte();
            if (dato != -1)
            {
                char letra = Convert.ToChar( (byte) dato );
                if (letra == 'A')
                    count++;
            }
        }
        while (dato != -1);
        Console.WriteLine("Tiene {0} letras A", count);
        fichero.Close();
    }
}
 

Ejercicios propuestos:

Ejercicio propuesto 8.10.1: Crea un programa que compruebe si un fichero (cuyo nombre introducirá el usuario) contiene una cierta letra (también escogida por el usuario).
Ejercicio propuesto 8.10.2: Crea un programa que cuente la cantidad de vocales que contiene un fichero binario.
Ejercicio propuesto 8.10.3: Crea un programa que diga si un fichero (binario) contiene una cierta palabra que introduzca el usuario.
Ejercicio propuesto 8.10.4: Crea un programa que extraiga a un fichero de texto todos los caracteres alfabéticos (códigos 32 a 127, además del 10 y el 13) que contenga un fichero binario.

Actualizado el: 22-03-2015 17:03

AnteriorPosterior