Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida com o laço de repetição que executa a leitura do arquivo

Olá

Não entendi a lógica por trás do trecho de código abaixo:

var quantidadeBytesLidos = -1;
while(quantidadeBytesLidos != 0)
{
    quantidadeBytesLidos = fluxoDoArquivo.Read(buffer, 0, 1024);
    EscreverBuffer(buffer);
}

O Read retorna a quantidade de bytes lidos. No primeiro laço ele lerá da posição 0 até a posição 1024. OK até aí!

Mas em que momento ele atualiza a posição de início do próximo laço?

3 respostas
solução!

Opa, Rodrigo. Beleza?

Os argumentos para o método Read são:

  • Buffer;
  • Índice da posição inicial do buffer a ser usada;
  • Quantidade de bytes a serem escritos no buffer;

Aquele 0 não é a posição do stream e sim a posição a ser usada no buffer - você poderia trocar por 10, por exemplo, e o buffer só seria utilizado a partir do índice 10 (mas, cuidado para não tentar usar mais bytes do que cabe no buffer, senão uma exceção será lançada).

Quando você chama o método Read, ele faz a leitura da quantidade de bytes que você pediu (ou menos, se chegou ao fim) e atualiza a posição automaticamente.

No curso, não utilizamos a propriedade Position, mas, você pode acompanhar a posição do stream imprimindo este valor na tela:

var quantidadeBytesLidos = -1;
while(quantidadeBytesLidos != 0)
{
    quantidadeBytesLidos = fluxoDoArquivo.Read(buffer, 0, 1024);
    EscreverBuffer(buffer);
    Console.WriteLine(fluxoDoArquivo.Position);
}

A posição do stream é atualizada automaticamente. É isso?

Exatamente, Rodrigo.