Cómo usar el bloque Try/Catch para detectar excepciones

Coloque las instrucciones de código que podrían elevar o producir una excepción en un bloque try, y las que se usan para controlar la excepción o excepciones en uno o varios bloques catch debajo del bloque try. Cada bloque catch incluye el tipo de excepción y puede contener instrucciones adicionales necesarias para controlar ese tipo de excepción.

En el ejemplo siguiente, un elemento StreamReader abre un archivo denominado data.txt y recupera una línea del archivo. Como es posible que el código genere cualquiera de las tres excepciones, se coloca en un bloque try. Tres bloques catch detectan las excepciones y las controlan mostrando los resultados en la consola.

using namespace System;
using namespace System::IO;

public ref class ProcessFile
{
public:
    static void Main()
    {
        try
        {
            StreamReader^ sr = File::OpenText("data.txt");
            Console::WriteLine("The first line of this file is {0}", sr->ReadLine());
            sr->Close();
        }
        catch (Exception^ e)
        {
            Console::WriteLine("An error occurred: '{0}'", e);
        }
    }
};

int main()
{
    ProcessFile::Main();
}
using System;
using System.IO;

public class ProcessFile
{
    public static void Main()
    {
        try
        {
            using (StreamReader sr = File.OpenText("data.txt"))
            {
                Console.WriteLine($"The first line of this file is {sr.ReadLine()}");
            }
        }
        catch (FileNotFoundException e)
        {
            Console.WriteLine($"The file was not found: '{e}'");
        }
        catch (DirectoryNotFoundException e)
        {
            Console.WriteLine($"The directory was not found: '{e}'");
        }
        catch (IOException e)
        {
            Console.WriteLine($"The file could not be opened: '{e}'");
        }
    }
}
Imports System.IO

Public Class ProcessFile
    Public Shared Sub Main()
        Try
            Using sr As StreamReader = File.OpenText("data.txt")
                Console.WriteLine($"The first line of this file is {sr.ReadLine()}")
            End Using
        Catch e As FileNotFoundException
            Console.WriteLine($"The file was not found: '{e}'")
        Catch e As DirectoryNotFoundException
            Console.WriteLine($"The directory was not found: '{e}'")
        Catch e As IOException
            Console.WriteLine($"The file could not be opened: '{e}'")
        End Try
    End Sub
End Class

Common Language Runtime (CLR) detecta las excepciones no controladas por los bloques catch. Si CLR detecta una excepción, puede producirse uno de los resultados siguientes, en función de la configuración de CLR:

  • Aparece un cuadro de diálogo Depurar.
  • El programa detiene la ejecución y aparece un cuadro de diálogo con información de la excepción.
  • Se imprime un error en el flujo de salida de error estándar.

Nota:

La mayoría del código puede producir una excepción y algunas excepciones, como OutOfMemoryException, las puede generar el propio CLR en cualquier momento. Aunque no es obligatorio que las aplicaciones controlen estas excepciones, tenga en cuenta esta posibilidad al escribir bibliotecas que puedan usar otros usuarios. Para obtener sugerencias sobre cuándo establecer el código en un bloque try, vea Procedimientos recomendados para excepciones.

Vea también