C# - Escrevendo e Lendo arquivos binários
Hoje vamos recordar como escrever e como ler arquivos binários na linguagem C#.

Já precisou escrever e ler dados fortemente tipados em um arquivo binário ?

Para quem sabe é bem simples...

Uma abordagem tradicional seria fazer o seguinte:

  • Criar um novo objeto System.IO.FileStream referenciado o arquivo;
  • Para escrever dados basta envolver o FileSTream em um System.IO.BinaryWriter e usar o método Write;
  • Para ler dados envolva o FileStream em um System.IO.BinaryReader e use o método Read;

Simples assim...

A classe BinaryReader lê tipos de dados primitivos como valores binários em uma codificação específica e a classe BinaryWriter grava tipos primitivos em binário em um fluxo e suporta cadeias de caracteres de escrita em uma codificação específica.(Um objeto BinaryWriter trabalha no nível mais baixo de Streams.)

A classe BinaryWriter é usada para escrever tipos primitivos como valores binários em um fluxo de codificação específica. Ela trabalha com objetos de fluxo que fornecem acesso aos bytes subjacentes. Para criar um objeto BinaryWriter, primeiro você tem que criar um objeto FileStream e depois passar o BinaryWriter ao método construtor.

Após criar os objetos é feita a leitura do arquivo origem em blocos de 1024 bytes escrevendo em seguida no destino. Esse processo é repetido até alcançar o final do arquivo.

A seguir vamos criar um projeto C# do tipo Console na plataforma .NET Core e mostrar isso na prática.

recursos usados:

  • Visual Basic 2019 Community Edition

Criando o projeto C# no VS 2019

Crie um projeto Console do tipo .NET Core chamado CShp_ArquivosBinarios1;

Inclua o código a seguir no método Main da classe Program:

using System;
using System.IO;
namespace CDhp_ArquivosBinarios1
{
    class Program
    {
        static void Main(string[] args)
        {
            var arquivo = "teste.bin";
            // criar um novo arquivo e um writer.
            using (FileStream fs = new FileStream(arquivo, FileMode.Create))
            {
                using (BinaryWriter w = new BinaryWriter(fs))
                {
                    // escrever dados : decimal, strings e char.
                    w.Write(124.23M);
                    w.Write("Macoratti");
                    w.Write("Quase tudo para .NET");
                    w.Write('!');
                }
            }
            Console.WriteLine($"Arquivo binário {arquivo} criado com sucesso");
            Console.WriteLine("Pressione uma tecla para ler o arquivo");
            Console.ReadLine();
            // Abrir o arquivo no modoe somente leitura
            using (FileStream fs = new FileStream("teste.bin", FileMode.Open))
            {
                // Exibir a informação do arquivo
                using (StreamReader sr = new StreamReader(fs))
                {
                    Console.WriteLine("Exibindo o conteúdo do arquivo:");
                    Console.WriteLine(sr.ReadToEnd());
                    Console.WriteLine();
                    Console.WriteLine("Convertendo os dados para o formato apropriado:");
                    // Le os dados e converte para o formato apropriado
                    fs.Position = 0;
                    using (BinaryReader br = new BinaryReader(fs))
                    {
                        Console.WriteLine(br.ReadDecimal());
                        Console.WriteLine(br.ReadString());
                        Console.WriteLine(br.ReadString());
                        Console.WriteLine(br.ReadChar());
                    }
                }
            }
            Console.WriteLine(Environment.NewLine);
            Console.ReadLine();
        }
    }
}

Executando o projeto teremos:

Pegue o código do projeto aqui:  CShp_ArquivosBinarios1.zip

"Levantarei os meus olhos para os montes, de onde vem o meu socorro.
O meu socorro vem do Senhor que fez o céu e a terra."

Salmos 121:1,2

Referências:


José Carlos Macoratti