Jak używać bloku try/catch do przechwytywania wyjątków
Umieść dowolne instrukcje kodu, które mogą zgłaszać lub zgłaszać wyjątek w try
bloku, i umieszczać instrukcje używane do obsługi wyjątków lub wyjątków w co najmniej jednym catch
bloku poniżej try
bloku. Każdy catch
blok zawiera typ wyjątku i może zawierać dodatkowe instrukcje potrzebne do obsługi tego typu wyjątku.
W poniższym przykładzie zostanie StreamReader otwarty plik o nazwie data.txt i pobiera wiersz z pliku. Ponieważ kod może zgłaszać dowolne z trzech wyjątków, znajduje się w try
bloku. Trzy catch
bloki przechwytują wyjątki i obsługują je, wyświetlając wyniki w konsoli.
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
Środowisko uruchomieniowe języka wspólnego (CLR) przechwytuje wyjątki, które nie są obsługiwane przez catch
bloki. Jeśli wyjątek zostanie przechwycony przez clR, jeden z następujących wyników może wystąpić w zależności od konfiguracji środowiska CLR:
- Zostanie wyświetlone okno dialogowe Debugowanie .
- Program zatrzymuje wykonywanie, a zostanie wyświetlone okno dialogowe z informacjami o wyjątku.
- Błąd jest wyświetlany do standardowego strumienia danych wyjściowych błędów.
Uwaga
Większość kodu może zgłosić wyjątek, a niektóre wyjątki, takie jak OutOfMemoryException, mogą być zgłaszane przez samą clr w dowolnym momencie. Chociaż aplikacje nie są wymagane do obsługi tych wyjątków, należy pamiętać o możliwości pisania bibliotek, które mają być używane przez inne osoby. Aby uzyskać sugestie dotyczące ustawiania kodu w try
bloku, zobacz Najlepsze rozwiązania dotyczące wyjątków.