Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Как обработать исключения которые генерит TIdFTP?   Найти похожие ветки 

 
MegaVolt ©   (2006-02-17 14:37) [0]

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

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


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

Смотри EIdProtocolReplyError.ReplyErrorCode


 
MegaVolt ©   (2006-02-17 15:01) [2]

>Смотри EIdProtocolReplyError.ReplyErrorCode

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

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

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


 
umbra ©   (2006-02-17 15:03) [3]


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

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


 
MegaVolt ©   (2006-02-17 15:08) [4]

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

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

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


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

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


 
umbra ©   (2006-02-17 15:24) [6]

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


 
MegaVolt ©   (2006-02-17 15:28) [7]

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


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

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


 
MegaVolt ©   (2006-02-17 15:41) [9]

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


 
umbra ©   (2006-02-17 15:42) [10]


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

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

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


 
umbra ©   (2006-02-17 15:46) [11]


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

это EIdConnectTimeout


 
MegaVolt ©   (2006-02-17 15:54) [12]

> EIdConnectTimeout

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

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

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


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


 
umbra ©   (2006-02-17 16:05) [13]

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

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


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

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


 
MegaVolt ©   (2006-02-17 16:21) [15]

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



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.031 c
4-1143231811
Delphi_is_cool
2006-03-24 23:23
2006.06.25
Как изменить цвет шрифта ? (Static)


6-1139817774
Anton_123
2006-02-13 11:02
2006.06.25
Delphi, Web & RealVideo


2-1149446503
Jenny
2006-06-04 22:41
2006.06.25
Удаленое администрирование


3-1146241531
Galiaf
2006-04-28 20:25
2006.06.25
Переместить указатель.


5-1134113633
AndrewK
2005-12-09 10:33
2006.06.25
Как подключить в рантайм стандартный редактор свойств Delphi