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.

Lásd még