Menu
Coddy logo textTech

Finally Block

Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 27 de 66.

O bloco finally contém código que sempre é executado, independentemente de uma exceção ocorrer ou não, mesmo se houver uma instrução return nos blocos try ou catch.

Crie uma estrutura básica try-catch-finally:

try
{
    // Code that might throw an exception
    int result = 10 / 2;
    Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
    // Code that handles the exception
    Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
    // Code that always executes
    Console.WriteLine("This always executes");
}

O bloco finally é útil para tarefas de limpeza, como fechar arquivos ou conexões de banco de dados:

System.IO.StreamReader file = null;
try
{
    file = new System.IO.StreamReader("data.txt");
    string content = file.ReadToEnd();
    Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
    Console.WriteLine("File not found.");
}
finally
{
    // Sempre feche o arquivo, mesmo se uma exceção ocorrer
    if (file != null)
    {
        file.Close();
    }
}
challenge icon

Desafio

Fácil

Crie um método chamado ProcessData que:

  1. Recebe um parâmetro string representando um nome de arquivo
  2. Tenta abrir o arquivo e ler seu conteúdo
  3. Escreve o conteúdo no console
  4. Limpa adequadamente os recursos usando um bloco finally
  5. Trata FileNotFoundException e IOException

Se o arquivo não puder ser encontrado, imprima: "ERROR: File not found: [filename]"

Se outro erro de IO ocorrer, imprima: "ERROR: Could not read the file: [error message]"

Sempre imprima "File operation completed." no bloco finally, independentemente de uma exceção ter ocorrido ou não.

Folha de consulta

O bloco finally contém código que sempre é executado, independentemente de uma exceção ocorrer ou não, mesmo se houver uma instrução return nos blocos try ou catch.

Estrutura básica try-catch-finally:

try
{
    // Código que pode lançar uma exceção
    int result = 10 / 2;
    Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
    // Código que lida com a exceção
    Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
    // Código que sempre executa
    Console.WriteLine("This always executes");
}

O bloco finally é útil para tarefas de limpeza, como fechar arquivos ou conexões de banco de dados:

System.IO.StreamReader file = null;
try
{
    file = new System.IO.StreamReader("data.txt");
    string content = file.ReadToEnd();
    Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
    Console.WriteLine("File not found.");
}
finally
{
    // Sempre feche o arquivo, mesmo se uma exceção ocorreu
    if (file != null)
    {
        file.Close();
    }
}

Experimente você mesmo

using System;
using System.IO;

class Program
{
    public static void ProcessData(string filename)
    {
        // Escreva seu código aqui
    }
    
    static void Main(string[] args)
    {
        string filename = Console.ReadLine();
        ProcessData(filename);
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica & Fluxo