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

Using e finally

O que estamos fazendo? Estamos lendo um arquivo no programa e antes de dar erro estamos fechando-o? E o que seria a conferência de referência nula? Como ela poderia se manter ou mudar de estado?

public class LeitorDeArquivo : IDisposable
    {
        public string Arquivo { get; }
        public LeitorDeArquivo(string arquivo)
        {
            Arquivo = arquivo;
            //throw new FileNotFoundException();
            Console.WriteLine("Abrindo arquivo" + arquivo);
        }
        public string LerProximaLinha()
        {
            Console.WriteLine("Lendo linha . . .");
            //throw new IOException(); 
            return "Linha do arquivo";
        }
        public void Dispose()
        {
            Console.WriteLine("Fechando arquivo.");
        }

    }
2 respostas
solução!

Olá André!

Quando abrimos um arquivo em um programa, ele ficará aberto em memória, e caso aconteça algum erro inesperado, não conseguimos fechar esse arquivo e consequentemente, não conseguimos abrir novamente.

O uso do Dispose() impede que este arquivo permaneça aberto. Liberando recursos e deixando que o sistema operacional ou outros programas façam uso dele.

Quanto a referência nula, digamos que um programa tem o caminho para um arquivo e antes que esse arquivo seja aberto, ele é movido. Com isso, esse programa não é mais capaz de encontrar esse arquivo, gerando assim uma referência nula para a variável que fará referência ao arquivo. É aí que o finally entra. Ele não deixa o programa parar, ele pode apenas chamar uma função que emite um alerta, pode abrir uma janela para procurar o arquivo novamente ou qualquer outro tratamento adequado para este caso.

Espero ter esclarecido, mas caso contrário, diga o que podemos ajudar.

Bons estudos!

Esclareceu sim, obrigado pela ajuda!