A try/catch blokk használata a kivételek elfogásához
Helyezzen el minden olyan kódkivonatot, amely kivételt eredményezhet vagy eredményezhet egy try
blokkban, és helyezze el a kivétel vagy kivételek kezelésére használt utasításokat a try
blokk alatti egy vagy több catch
blokkban. Minden catch
blokk tartalmazza a kivétel típusát, és további utasításokat is tartalmazhat a kivételtípus kezeléséhez.
Az alábbi példában egy StreamReader data.txt nevű fájlt nyit meg, és egy sort kér le a fájlból. Mivel a kód három kivétel bármelyikét kiveheti, egy try
blokkba kerül. Három catch
blokk rögzíti a kivételeket, és kezeli őket az eredmények konzolon való megjelenítésével.
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
A Common Language Runtime (CLR) a blokkok által catch
nem kezelt kivételeket rögzíti. Ha a CLR kivételt tapasztal, a CLR-konfigurációtól függően az alábbi eredmények egyike fordulhat elő:
- Megjelenik egy Hibakeresés párbeszédpanel.
- A program leállítja a végrehajtást, és megjelenik egy párbeszédpanel, amely kivételadatokat tartalmaz.
- Hiba jelenik meg a standard hibakimeneti adatfolyamban.
Feljegyzés
A legtöbb kód képes kivételt kivenni, és bizonyos kivételeket, például OutOfMemoryExceptiona CLR bármikor ki tud dobni. Bár az alkalmazásoknak nem kell foglalkozniuk ezekkel a kivételekkel, tisztában kell lenniük azzal a lehetőséggel, hogy mások által használandó kódtárakat írnak. A blokkok try
kódjának beállítására vonatkozó javaslatokért tekintse meg a kivételek ajánlott eljárásait.