Ler e gravar em arquivos binários

o BinaryReader e BinaryWriter classes são usadas para ler e gravar em um arquivo binário.

A classe BinaryReader

o BinaryReaderclasse é usada para ler dados binários de um arquivo. UMABinaryReader objeto é criado passando um FileStream objeto ao seu construtor.

A tabela a seguir descreve os comumente usados methods do BinaryReader classe.

Sr. Não. Método e Descrição
1

public override void Close()

Ele fecha o objeto BinaryReader e o fluxo subjacente.

2

public virtual int Read()

Lê os caracteres do fluxo subjacente e avança a posição atual do fluxo.

3

public virtual bool ReadBoolean()

Lê um valor booleano do fluxo atual e avança a posição atual do fluxo em um byte.

4

public virtual byte ReadByte()

Lê o próximo byte do fluxo atual e avança a posição atual do fluxo em um byte.

5

public virtual byte[] ReadBytes(int count)

Lê o número especificado de bytes do fluxo atual em uma matriz de bytes e avança a posição atual por esse número de bytes.

6

public virtual char ReadChar()

Lê o próximo caractere do fluxo atual e avança a posição atual do fluxo de acordo com a codificação usada e o caractere específico que está sendo lido do fluxo.

7

public virtual char[] ReadChars(int count)

Lê o número especificado de caracteres do fluxo atual, retorna os dados em uma matriz de caracteres e avança a posição atual de acordo com a codificação usada e o caractere específico que está sendo lido do fluxo.

8

public virtual double ReadDouble()

Lê um valor de ponto flutuante de 8 bytes do fluxo atual e avança a posição atual do fluxo em oito bytes.

9

public virtual int ReadInt32()

Lê um inteiro assinado de 4 bytes do fluxo atual e avança a posição atual do fluxo em quatro bytes.

10

public virtual string ReadString()

Lê uma string do fluxo atual. A string é prefixada com o comprimento, codificada como um número inteiro de sete bits por vez.

A classe BinaryWriter

o BinaryWriterclasse é usada para gravar dados binários em um fluxo. Um objeto BinaryWriter é criado passando um objeto FileStream para seu construtor.

A tabela a seguir descreve os métodos comumente usados ​​da classe BinaryWriter.

Sr. Não. Descrição da função
1

public override void Close()

Ele fecha o objeto BinaryWriter e o fluxo subjacente.

2

public virtual void Flush()

Limpa todos os buffers do gravador atual e faz com que todos os dados do buffer sejam gravados no dispositivo subjacente.

3

public virtual long Seek(int offset, SeekOrigin origin)

Define a posição dentro do fluxo atual.

4

public virtual void Write(bool value)

Grava um valor booleano de um byte no fluxo atual, com 0 representando falso e 1 representando verdadeiro.

5

public virtual void Write(byte value)

Grava um byte não assinado no fluxo atual e avança a posição do fluxo em um byte.

6

public virtual void Write(byte[] buffer)

Grava uma matriz de bytes no fluxo subjacente.

7

public virtual void Write(char ch)

Grava um caractere Unicode no fluxo atual e avança a posição atual do fluxo de acordo com a codificação usada e os caracteres específicos sendo gravados no fluxo.

8

public virtual void Write(char[] chars)

Grava uma matriz de caracteres no fluxo atual e avança a posição atual do fluxo de acordo com a codificação usada e os caracteres específicos sendo gravados no fluxo.

9

public virtual void Write(double value)

Grava um valor de ponto flutuante de oito bytes no fluxo atual e avança a posição do fluxo em oito bytes.

10

public virtual void Write(int value)

Grava um inteiro assinado de quatro bytes no fluxo atual e avança a posição do fluxo em quatro bytes.

11

public virtual void Write(string value)

Grava uma string com prefixo de comprimento neste fluxo na codificação atual do BinaryWriter e avança a posição atual do fluxo de acordo com a codificação usada e os caracteres específicos sendo gravados no fluxo.

Para obter uma lista completa de métodos, visite a documentação do Microsoft C #.

Exemplo

O exemplo a seguir demonstra a leitura e gravação de dados binários -

using System;
using System.IO;

namespace BinaryFileApplication {
   class Program {
      static void Main(string[] args) {
         BinaryWriter bw;
         BinaryReader br;
         
         int i = 25;
         double d = 3.14157;
         bool b = true;
         string s = "I am happy";
         
         //create the file
         try {
            bw = new BinaryWriter(new FileStream("mydata", FileMode.Create));
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot create file.");
            return;
         }
         
         //writing into the file
         try {
            bw.Write(i);
            bw.Write(d);
            bw.Write(b);
            bw.Write(s);
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot write to file.");
            return;
         }
         bw.Close();
         
         //reading from the file
         try {
            br = new BinaryReader(new FileStream("mydata", FileMode.Open));
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot open file.");
            return;
         }
         
         try {
            i = br.ReadInt32();
            Console.WriteLine("Integer data: {0}", i);
            d = br.ReadDouble();
            Console.WriteLine("Double data: {0}", d);
            b = br.ReadBoolean();
            Console.WriteLine("Boolean data: {0}", b);
            s = br.ReadString();
            Console.WriteLine("String data: {0}", s);
         } catch (IOException e) {
            Console.WriteLine(e.Message + "\n Cannot read from file.");
            return;
         }
         br.Close();
         Console.ReadKey();
      }
   }
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Integer data: 25
Double data: 3.14157
Boolean data: True
String data: I am happy