Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, bir try-catch-finally özel durumu yakalamak için bir bloğun nasıl kullanılacağı açıklanmaktadır.
Özgün ürün sürümü: Visual C++
Özgün KB numarası: 815662
Özet
try-catch-finally Blok, özel durumun oluşabileceği herhangi bir kodun çevresine yerleştirdiğiniz sarmalayıcıdır. Özel durumları yakalamak ve bunlarla ilgilenmek standart programlama görevleridir.
Bir try-catch-finally blok aşağıdaki bölümlerden oluşur:
- Özel durum oluşturabilecek tüm kodlar try bloğunun içine yerleştirilir.
- Bir özel durum oluşursa,
catchblok girilir ve program kurtarmak veya kullanıcıyı uyarmak için uygun işlemi yapabilir. - Bloktaki
finallykod her zaman yürütülür ve bir özel durum oluştuktan sonra temizleme gerçekleştirebilir.finallyBlok isteğe bağlıdır.
Bu makale, aşağıdaki Microsoft .NET Framework Sınıf Kitaplığı ad alanlarına başvurur: System.IO ve System.Security.
Visual C++ .NET'te özel durumları yakalama
Visual Studio .NET'i başlatın.
Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'ye tıklayın.
Visual C++'da, Proje Türleri'nin altında Visual C++ öğesine tıklayın ve ardından Şablonlar'ın altında CLR Konsol Uygulaması'nı tıklatın.
Ad kutusuna Q815662 yazın ve Tamam'a tıklayın.
Q815662.cpp kod penceresindeki tüm kodu aşağıdaki kodla değiştirin. Kod üç değişken bildirir ve başlatır. K'nin başlatılması bir hataya neden olur.
#include "stdafx.h" #using <mscorlib.dll> #include <tchar.h> using namespace System; void _tmain(void) { Console::WriteLine("We're going to divide 10 by 0 and see what happens..."); Console::WriteLine(); int i = 10; int j = 0; int k = i/j; //Error on this line. }F5 tuşuna basın. Bir
System.DivideByZeroExceptionözel durum alırsınız.Hatayı yakalamak için kodunuzun çevresinde bir
try-catchdeyimi sarmalayın. Aşağıdaki kod, kodda oluşan tüm hataları yakalar ve genel bir hata iletisi görüntüler. Q815662.cpp kod penceresindeki kodu aşağıdaki kodla değiştirin:#include "stdafx.h" #using <mscorlib.dll> #include <tchar.h> using namespace System; void _tmain(void) { try { Console::WriteLine("We're going to divide 10 by 0 and see what happens..."); Console::WriteLine(); int i = 10; int j = 0; int k = i/j; //Error on this line. } catch(...) { Console::WriteLine("An error occurred."); } }Uygulamayı çalıştırmak için CTRL+F5'e basın.
Not
Sistem özel durumu hata iletisi yerine bloktan
catchgelen hata iletisi görüntülenir.Hatadan bağımsız olarak temizleme veya işlem sonrası yapmanız gerekiyorsa deyiminin
__finallytry-catch-finallybölümünü kullanın. Deyiminin finally bölümündeki kod, özel durumdan bağımsız olarak her zaman yürütülür. Hata oluşmasa bile aşağıdaki kod konsolda aşağıdaki iletiyi görüntüler:This statement is always printed.Q815662.cpp kod penceresindeki kodu aşağıdaki kodla değiştirin:
#include "stdafx.h" #using <mscorlib.dll> #include <tchar.h> using namespace System; void _tmain(void) { try { Console::WriteLine("We're going to divide 10 by 0 and see what happens..."); Console::WriteLine(); int i = 10; int j = 0; int k = i/j; //Error on this line. } catch(...) { Console::WriteLine("An error occurred."); } __finally //This section is performed regardless of the above processing. { Console::WriteLine(); Console::WriteLine("This statement is always printed"); } }Projeyi çalıştırmak için CTRL+F5 tuşlarına basın.
Özel durum hakkındaki ayrıntıları almak için catch deyimiyle özel durum nesnesini kullanabilirsiniz. Özel durum nesnesi, kaynağı tanımlamanıza yardımcı olabilecek bir dizi özelliğe sahiptir ve özel durum hakkında yığın bilgilerine sahiptir. Bu bilgiler, özel durumun özgün nedeninin izlenmesine yardımcı olabilir veya kaynağının daha iyi bir açıklamasını sağlayabilir. Aşağıdaki örnek bir özel durum yakalar ve belirli bir hata iletisi verir. Q815662.cpp kod penceresindeki kodu aşağıdaki kodla değiştirin:
#include "stdafx.h" #using <mscorlib.dll> #include <tchar.h> using namespace System; using namespace System::Reflection; void _tmain(void) { try { Console::WriteLine("We're going to divide 10 by 0 and see what happens..."); Console::WriteLine(); int i = 10; int j = 0; int k = i/j; //Error on this line. } catch(Exception *e) { Console::WriteLine("An error occurred."); Console::WriteLine(e->Message); // Print the error message. Console::WriteLine(e->StackTrace); //String that contains the stack trace for this exception. } __finally //This section is performed regardless of the above processing. { Console::WriteLine(); Console::WriteLine("This statement is always printed"); } Console::ReadLine(); }Bu noktaya kadar belirli olmayan bir özel durumla ilgilendiniz. Ancak, ne tür bir özel durumun gerçekleşeceğini önceden biliyorsanız, beklenen özel durumu yakalayabilir ve uygun şekilde işleyebilirsiniz. Diğer tüm özel durumları yakalamak ve bunlarla başa çıkmak için aşağıdaki kodda açıklanan birden çok catch bloğu kullanın:
#include "stdafx.h" #using <mscorlib.dll> #include <tchar.h> using namespace System; using namespace System::IO; using namespace System::Security; void _tmain(void) { try { File::Create("c:\\temp\\testapp.txt"); //Can fail for a number of resons } // This error may occur if the temp folder does not exist. catch(IOException *ioe) { Console::WriteLine("An IOException exception occurred!"); Console::WriteLine(ioe->ToString()); } // You do not have the appropriate permission to take this action. catch(SecurityException *se) { Console::WriteLine("An SecurityException exception occur") } // Catch all exceptions catch(Exception *e) { Console::WriteLine(e->ToString()); } }Bilgisayar yapılandırmaları farklı olabileceğinden, bu adımdaki örnek bir özel durum oluşturabilir veya oluşturmayabilir. Bir giriş/çıkış (GÇ) özel durumunu zorlamak istiyorsanız, dosya yolunu bilgisayarınızda var olmayan bir klasörle değiştirin.