Главная страница
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.03 c
4-1143356476
scolopax
2006-03-26 11:01
2006.06.25
Блокирование Desktop


2-1149745508
Wood
2006-06-08 09:45
2006.06.25
Можно ли определить позицию курсора в TEdit и как?


15-1148882300
Vlad Oshin
2006-05-29 09:58
2006.06.25
Удалить файл командной строкой по дате/размеру?


2-1149506476
Yegorchic
2006-06-05 15:21
2006.06.25
Определение иконки файла по расширению


1-1147726374
Officeman
2006-05-16 00:52
2006.06.25
Вопрос о временный таблицах