2
respostas

[Dúvida] Uso do using

Olá, Com relação ao FileStream, ao usar o método Close() como explicado no vídeo, além de outros recursos, ele permite que você altere o arquivo mesmo que a aplicação esteja em execução. No entanto, com o uso do using, que implementa o Close implicitamente, não obtive o mesmo resultado. Teria algum motivo em específico?

        var arquivo = "contas.txt";
        using (var fluxoDoArquivo = new FileStream(arquivo, FileMode.Open))
        {
            var buffer = new byte[1024];

            var quantidadeBytesLidos = -1;
            while (quantidadeBytesLidos != 0)
            {
                quantidadeBytesLidos = fluxoDoArquivo.Read(buffer, 0, 1024);
                Console.WriteLine($"\n\nBytes lidos: {quantidadeBytesLidos}\n");
                EscreverBuffer(buffer,quantidadeBytesLidos);
            }

            Console.ReadKey();
        }

        static void EscreverBuffer(byte[] buffer,int bytesLidos)
        {
            var encoding = new UTF8Encoding();
            var texto = encoding.GetString(buffer,0,bytesLidos);

            Console.Write(texto);
        }

duvida_sobre_uso_using

2 respostas

Olá Vinicius, bom dia!

O uso do using é uma forma de garantir que o recurso será liberado após o seu uso, sem a necessidade de chamar o método Close() explicitamente. Isso é feito através da implementação da interface IDisposable, que permite que o recurso seja liberado automaticamente quando o bloco using é finalizado.

No seu caso, o uso do using não permite que você altere o arquivo enquanto a aplicação está em execução, pois o recurso é liberado assim que o bloco using é finalizado. Para permitir a alteração do arquivo enquanto a aplicação está em execução, você precisa manter o recurso aberto, como é feito quando se utiliza o método Close() explicitamente.

Espero ter ajudado e bons estudos!

Vinicius,

Você colocou o Console.ReadKey(); dentro do bloco using. Logo, o arquivo só será liberado após o usuário pressionar alguma tecla do teclado.

Se a sua intenção é liberar o arquivo lido e manter a aplicação em execução aguardando o usuário pressionar uma tecla, mova a instrução Console.ReadKey(); para fora do using (pode colocar acima da linha static void EscreverBuffer(...).

Se essa resposta ajudou a esclarecer sua dúvida, favor marcar como solução.