1
resposta

[Dúvida] Sobre o 'using'

Pelo o que entendi, neste exercício e no anterior, somos recomendados a usar o using ao invés do try-catch-finally Porém, ao fazer isso da forma recomendada..

using(LeitorDeArquivo leitor = new LeitorDeArquivo("contas.txt"))
{
    leitor.LerProximaLinha();
    leitor.LerProximaLinha();
    leitor.LerProximaLinha();
}

Notei que o using não trata as exceções, parando a compilação. Fiz alguma coisa de errado, ou devo usar o using em combinação com o try-catch-finally? Se não é esse o caso, como trato as exceções com o using, pra não interromper a compilação?

Além disso, nesse exercício específico, não acho que tenha ficado claro como tratar a FileNotFoundException();, uma vez que ela é mencionada, mas em nenhum momento após isso vi ela sendo usada num catch, nem uma simulação de como seria um arquivo não encontrado.

1 resposta

Olá Matheus, tudo bem?

O using é uma forma elegante e segura de se trabalhar com recursos que precisam ser liberados, como é o caso de arquivos. Ele é uma forma de garantir que o recurso será liberado mesmo que ocorra uma exceção.

No exemplo que você postou, o using está sendo utilizado corretamente. Porém, o using não trata as exceções, ele apenas garante que o recurso será liberado. Para tratar as exceções, você pode utilizar um try-catch dentro do bloco using, assim:

using(LeitorDeArquivo leitor = new LeitorDeArquivo("contas.txt"))
{
    try
    {
        leitor.LerProximaLinha();
        leitor.LerProximaLinha();
        leitor.LerProximaLinha();
    }
    catch(FileNotFoundException ex)
    {
        Console.WriteLine("Arquivo não encontrado");
    }
}

Dessa forma, se ocorrer uma exceção do tipo FileNotFoundException, ela será tratada dentro do bloco catch e a compilação não será interrompida.

Espero ter ajudado e bons estudos!