Testando o código do exercício 3 (ajustando o rodapé para dentro do Using do FileStream) em minha máquina, a cópia foi realizada com sucesso:
var arquivoOriginal = new FileStream("c:/temp/teste.txt", FileMode.Open);
var arquivoNovo = new FileStream("c:/temp/teste_copia.txt", FileMode.Create);
var buffer = new byte[1024];
using (arquivoOriginal)
using (arquivoNovo)
{
var bytesLidos = -1;
while (bytesLidos != 0)
{
bytesLidos = arquivoOriginal.Read(buffer, 0, 1024);
arquivoNovo.Write(buffer, 0, bytesLidos);
}
var rodape = Encoding.UTF8.GetBytes("Este documento é uma cópia do original");
arquivoNovo.Write(rodape, 0, rodape.Length);
}
Minha dúvida é na questão do Encoding: No momento de escrever no arquivo "c:/temp/teste_copia.txt" não foi utilizado o método GetString da classe Enconding para converter a variável bytesLidos antes de invocar o método Write do arquivoNovo.
Por que o resultado não foi '????' ou uma cadeia de bytes da tabela ASCII? Tem algo a ver com fato do arquivoOriginal(Source) já possuir essa formatação Unicode, sendo assim ele simplesmente não precisa fazer isso antes da saída para o arquivoNovo(Target)?