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.