Obsługa błędów.

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Obsługa błędów.

Nowy postprzez mko000 » sobota, 2 stycznia 2010, 17:09

Witam. Piszę program wysyłający pliki na ftp i mam problem. Gdy niepoprawnie wpiszę host lub inne dane wywala mi błąd. Jak go przechwycić i wyświetlić wiadomość ze dane są błędne?
Avatar użytkownika
mko000
Homos antropiczny
Homos antropiczny
 
Posty: 74
Dołączył(a): sobota, 19 grudnia 2009, 00:30
Podziękował : 35
Otrzymał podziękowań: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder 2010
    NieznanyNieznana

Re: Obsługa błędów.

Nowy postprzez Pitek » sobota, 2 stycznia 2010, 17:17

Tak np.
Kod: Zaznacz cały
try
{
   IdFTP1->Host="ftp.republika.pl";
   IdFTP1->Connect();
}
catch(...)
{
   MessageBox(NULL,"Podano błędny adres hosta","Info",MB_ICONINFORMATION|MB_OK);
}

To tylko przykład bo nie podałem hasła i nazwy użytkownika.
Można potem dodatkowe dane zagnieżdżać.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl

Za ten post autor Pitek otrzymał podziękowanie od:
mko000
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Windows 8 Pro 64bit / Ubuntu 14.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: Obsługa błędów.

Nowy postprzez Cyfrowy Baron » sobota, 2 stycznia 2010, 17:37

A próbowałeś metody try catch?

Kod: Zaznacz cały
try
{
// próba połączenia
}
catch(....)
{
jeżeli nie komunikat błędu
}


Można też przechwycić komunikat błedu:

Kod: Zaznacz cały
try
{
// próba połączenia
}
catch(Exception &exception)
{
  ShowMessage("Błąd:" + exception.Message);
}


albo:

Kod: Zaznacz cały
try
{
// próba połączenia
}
catch(Exception &exception)
{
  exception.Message.Insert("Błąd: ", 1);
  Application->ShowException(&exception);
}


W drugim i trzecim wypadku, treść komunikatu będzie najpewniej po angielsku, gdyż takim językiem operują biblioteki, poza oczywiście tą częścią komunikatu gdzie wstawisz swój tekst.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
mko000
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4727
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 444
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Obsługa błędów.

Nowy postprzez banita » niedziela, 3 stycznia 2010, 13:29

w blokach catch powinnienes lapac tylko te wyjatki ktore znasz, innych nie wolno.
konstrukcje:
catch(...) <- lapie wszystkie mozliwe wyjatki kotre nie zostaly przechwycone
catch(const Exception& ex) <- lapie 99% albo 100% wyjatkow w VCL bo to ich klasa bazowa.

jesli nie wiesz co to za blad i nie masz wiedzy ze w ogole taki blad moze wystapic to jak chcesz go obslugiwac?
w blokach catch powinno podawac sie konkretne znane przypadki sytuacji wyjatkowych.

ps: vcl troche utrudnia takie(prawidlowe) postepowanie gdyz czesto rzuca wyjatkami na prawo i lewo w sytuacjach ktore w cale nie powinny byc wyjatkowe.
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron