Menu
Coddy logo textTech

Finally Block

Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 27 de 66.

El bloque finally contiene código que siempre se ejecuta, ocurra o no una excepción, incluso si hay una sentencia return en los bloques try o catch.

Crea una estructura básica try-catch-finally:

try
{
    // Código que podría lanzar una excepción
    int result = 10 / 2;
    Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
    // Código que maneja la excepción
    Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
    // Código que siempre se ejecuta
    Console.WriteLine("This always executes");
}

El bloque finally es útil para tareas de limpieza como cerrar archivos o conexiones de base de datos:

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
{
    // Siempre cerrar el archivo, incluso si ocurrió una excepción
    if (file != null)
    {
        file.Close();
    }
}
challenge icon

Desafío

Fácil

Crea un método llamado ProcessData que:

  1. Toma un parámetro string que representa un nombre de archivo
  2. Intenta abrir el archivo y leer su contenido
  3. Escribe el contenido en la consola
  4. Limpia correctamente los recursos usando un bloque finally
  5. Maneja FileNotFoundException e IOException

Si el archivo no se puede encontrar, imprime: "ERROR: File not found: [filename]"

Si ocurre otro error de IO, imprime: "ERROR: Could not read the file: [error message]"

Siempre imprime "File operation completed." en el bloque finally, haya ocurrido una excepción o no.

Hoja de referencia

El bloque finally contiene código que siempre se ejecuta, ocurra o no una excepción, incluso si hay una declaración return en los bloques try o catch.

Estructura básica de 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");
}

El bloque finally es útil para tareas de limpieza como cerrar archivos o conexiones de base de datos:

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
{
    // Always close the file, even if an exception occurred
    if (file != null)
    {
        file.Close();
    }
}

Pruébalo tú mismo

using System;
using System.IO;

class Program
{
    public static void ProcessData(string filename)
    {
        // Escribe tu código aquí
    }
    
    static void Main(string[] args)
    {
        string filename = Console.ReadLine();
        ProcessData(filename);
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo