Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обработать исключения которые генерит TIdFTP? [D5, Win95/98]


MegaVolt ©   (2006-02-17 14:37:00) 

При возникновении некого исключения TIdFTP возвращает мне некую строчку с ошибкой. Например "Login or password incorect!". Можно ли её считать постоянной и независящей от языка винды? Или нельзя?

Короче как распознать что именно за исключение возникло. Например при неправильном пароле нужно запросить у польователя правильный. А при ошибке соединения выдать развёрнутое сообщение с описание где возникла ошибка.


MegaVolt   (2006-02-17 16:21:00) [1]

Ясно. Огромное спасибо :)


Dmitrij_K   (2006-02-17 16:09:00) [2]

Или так
except
  ShowMessage(ExceptObject.ClassName)
end


umbra   (2006-02-17 16:05:00) [3]

рецепт для инди:

берутся три буквы EId и справа к ним добавляется название искомой ситуации по английски. :) Затем в справке проверяем, угадали или нет


MegaVolt   (2006-02-17 15:54:00) [4]

> EIdConnectTimeout

Уря-я-я точно именно оно.

А я уже начал писать так :

  on e: EIdException do
     begin
       if e.Message=RSConnectTimeout then ShowMessage('Id>Время вышло');
     end;


Научите как вы так быстро это находите?


umbra   (2006-02-17 15:46:00) [5]


> А как быть с таймаутом?

это EIdConnectTimeout


umbra   (2006-02-17 15:42:00) [6]


> IdFTP возвращает только такие исключения

нет конечно. Могут возникнуть любые исключения.
Поэтому луше писать так

try
ftp.Connect;
except
  on E: EIdProtocolReplyError do ShowMessage(IntToStr(E.ReplyErrorCode));
  on E: EAnotherError do {что нибудь}; //какое-то абстрактное другое исключение
end;


MegaVolt   (2006-02-17 15:41:00) [7]

А как быть с таймаутом? Он не подходит не под EIdProtocolReplyError не под EIdSocketError


Dmitrij_K   (2006-02-17 15:35:00) [8]

Проверь сначала что исключение  EIdProtocolReplyError
if (ExceptObject is EIdProtocolReplyError)


MegaVolt   (2006-02-17 15:28:00) [9]

Заработало :))))
Только вот один вопрос а если вдруг исключение отличается от EIdProtocolReplyError или IdFTP возвращает только такие исключения?
Т.е. не возникнет ли у меня ситуация когда я буду обращатся к ReplyErrorCode хотя его в природе не существует?


umbra   (2006-02-17 15:24:00) [10]

Dmitrij_K в [1] дал Вам в общем, правильный совет. Эти ошибки - не ошибки в программе, а ошибки, которые выдает протокол взаимодействия (у Вас - ФТП). У каждой такой ошибки есть уникальный трехзначный код. Перечень этих кодов и что они значат можно найти в описании протокола (для ФТП это RFC 959). В программе Вам надо ловить исключение EIdProtocolReplyError, в свойстве ReplyErrorCodeкоторого и будет код ошибки. Далее, на основе этого кода Вы выдаете пользователю свое сообщение. Ориентироваться на текст сообщения об ошибке не стоит.


Dmitrij_K   (2006-02-17 15:21:00) [11]

try
 ftp.Connect;
 except
   ShowMessage(IntToStr(EIdProtocolReplyError(ExceptObject).ReplyErrorCode))
 end
Коды ошибок см в описании FTP протокола или эксперементально


MegaVolt   (2006-02-17 15:08:00) [12]

>какого именно?

например я коннекчусь к серверу.
Вызываю IdFTP1.Connect;
Если сервер молчит получаю исключение с сообщением таймаут
Если серверу не подходит мой пароль то выдаёт сообщение пароль некоректный.
Если мой файервол непустил прожку в сеть то получаю ошибку подключение разорвано.

Т.е. я получаю строку которая содержит ошибку на английском. Где гарантия что на другой винде эта строка будет бит в бит такой же? Если гарантии нет то я не могу опиратся на это сообщения для анализа причины ошибки в программе.


umbra   (2006-02-17 15:03:00) [13]


> некого исключения

какого именно?


MegaVolt   (2006-02-17 15:01:00) [14]

>Смотри EIdProtocolReplyError.ReplyErrorCode

посмотрел но это похоже к FTP не имеет отношения :(

К сокетам вот это подходит EIdSocketError.LastError

А вот ошибки FTP типа Time Out или Password incorrect имеют другой тип и кода вроде как не имеют :(


Dmitrij_K   (2006-02-17 14:49:00) [15]

Смотри EIdProtocolReplyError.ReplyErrorCode


Наверх

Титульная страница Поиск, карта сайта Написать письмо