quarta-feira, 2 de março de 2016

Como usar a função BlockWrite() para escrever um ou mais bytes em um arquivo

A função BlockWrite pode ser usada quando precisamos escrever um ou mais bytes em um arquivo não tipado, ou seja, um arquivo de tipo arbitrário não texto. Veja sua assinatura:

a) procedure BlockWrite(var F: File; var Buf; Count: Integer); overload;

b) procedure BlockWrite(var F: File; var Buf; Count: Integer; var AmtTransferred: Integer); overload;

Aqui F é um arquivo não tipado no qual os dados serão escritos, Buf é qualquer variável contendo os dados que serão escritos no arquivo, Count é uma expressão do tipo Integer e representa a quantidade de registros a serem escritos e AmtTransferred é uma variável opcional do tipo Integer que representa a quantidade de registros realmente escritos.

Vamos ver um exemplo do uso desta função? Considere o seguinte trecho de código:

procedure TForm3.Button2Click(Sender: TObject);
var
  arquivo: File;
  valor: Byte;
begin
  // vamos abrir o arquivo para escrita
  AssignFile(arquivo, 'dados.dat');
  Rewrite(arquivo, 1);  // tamanho do registro = 1 byte

  valor := 90; // vamos escrever o valor 90

  BlockWrite(arquivo, valor, 1);
end;

Aqui nós escrevemos o byte 90 no arquivo "dados.dat". Note que, ao chamar a função Rewrite() nós informamos que o arquivo sendo criado terá o tamanho de 1 byte por registro. Vejamos agora como escrever quatro bytes (agrupados em um Integer):

procedure TForm3.Button2Click(Sender: TObject);
var
  arquivo: File;
  valor: Integer;
begin
  // vamos abrir o arquivo para escrita
  AssignFile(arquivo, 'dados.dat');
  Rewrite(arquivo, 4);  // tamanho de cada registro = 4 bytes

  valor := 2290; // vamos escrever o valor 2290
  BlockWrite(arquivo, valor, 1);
end;

Desta vez nós definimos que cada registro no arquivo terá 4 bytes, ou seja, um inteiro (Integer). Para finalizar, veja como podemos escrever um array (matriz) de bytes:

procedure TForm3.Button2Click(Sender: TObject);
var
  arquivo: File;
  valores: array[0..3] of Byte; // uma matriz de 4 bytes
  i: integer;
begin
  // vamos abrir o arquivo para escrita
  AssignFile(arquivo, 'dados.dat');
  Rewrite(arquivo, 1);  // tamanho de cada registro = 1 byte

  // vamos atribuir valores aos bytes
  for i := 0 to 3 do
    begin
      valores[i] := (i + 1);
    end;

  // vamos escrever um bloco de 4 registros de 1 byte cada
  BlockWrite(arquivo, valores, 4);
end;

Nenhum comentário:

Postar um comentário