Форум: "Сети";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
ВнизКак обработать исключения которые генерит 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.01 c