Sdílet prostřednictvím


Použití bloku try/catch k zachycení výjimek

Umístěte všechny příkazy kódu, které můžou vyvolat nebo vyvolat výjimku v try bloku, a umístěte příkazy použité ke zpracování výjimky nebo výjimek v jednom nebo více catch blocích pod try blok. Každý catch blok obsahuje typ výjimky a může obsahovat další příkazy potřebné ke zpracování daného typu výjimky.

V následujícím příkladu StreamReader se otevře soubor s názvem data.txt a načte řádek ze souboru. Vzhledem k tomu, že kód může vyvolat některou try ze tří výjimek, je umístěn v bloku. Tři catch bloky zachytí výjimky a zpracují je zobrazením výsledků v konzole.

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

Modul CLR (Common Language Runtime) zachytává výjimky, které catch nezpracovává bloky. Pokud clR zachytí výjimku, může v závislosti na konfiguraci CLR dojít k jednomu z následujících výsledků:

  • Zobrazí se dialogové okno Ladění .
  • Program zastaví provádění a zobrazí se dialogové okno s informacemi o výjimce.
  • Chyba se vytiskne do standardního výstupního datového proudu chyb.

Poznámka:

Většina kódu může vyvolat výjimku a některé výjimky, například OutOfMemoryException, mohou být vyvolány CLR sám kdykoli. I když aplikace nemusí tyto výjimky řešit, mějte na paměti, že při psaní knihoven, které budou používat jiní uživatelé. Návrhy, kdy nastavit kód v bloku, najdete v try tématu Osvědčené postupy pro výjimky.

Viz také