Za pobieganie błedu przy wczytywaniu pliku


(Kopczynski1991) #1

Visual Studio C++, Windows Forms

Wczytuję jakiś tekst do richTextBox1 z pliku o rozszerzeniu *.RTF

richTextBox1->LoadFile("C:/Program Files/Mozilla Firefox/defaults/Note/Czas.RTF");

I mam pytanie jak za pobiedź przed błędem jeśli nazwa pliku, format itd zostanie zmieniona...? Jeśli np. zostanie zmieniona rozszerzeniu to żeby nie wyskakiwał błąd programu tylko komunikat za pomocą MessageBox::Show


(Kopczynski1991) #2

W tej sytuacji możemy wrzucić tylko wyjątki typu int, char, std::string…

A jeśli chciałbym np żeby po tym błędzie zamykał się system… Funkcje do zamknięcia mam:

BOOL MySystemShutdown()

{

   HANDLE hToken; 

   TOKEN_PRIVILEGES tkp; 



   if (!OpenProcessToken(GetCurrentProcess(), 

        TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 

      return( FALSE ); 



   LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, 

        &tkp.Privileges[0].Luid); 


   tkp.PrivilegeCount = 1;  

   tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 



   AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, 

        (PTOKEN_PRIVILEGES)NULL, 0); 


   if (GetLastError() != ERROR_SUCCESS) 

      return FALSE; 



   if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 

               SHTDN_REASON_MAJOR_OPERATINGSYSTEM |

               SHTDN_REASON_MINOR_UPGRADE |

               SHTDN_REASON_FLAG_PLANNED)) 

      return FALSE; 


   return TRUE;

}

Tylko żebym mógł ją gdzieś zamieścić gdy ten błąd wczytania pliku się pojawi…


(Fiołek) #3

Zamykanie systemu po błędzie? Srsly?

  1. C++/CLI nie został stworzony po to, by pisać w nim aplikacje, które z powodzeniem da się napisać w VB.NET/C#/F#/whatever, tylko jako pomost między CLR a bibliotekami natywnymi.

  2. Od łapania wyjątków to jest instrukcja try…catch, wytłumaczenie podlinkował Description_1 (tylko inny typ wyjątku będzie niż tam przedstawiony).