Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.013 c
1-1147853235
Шмель
2006-05-17 12:07
2006.06.25
Сортировка


2-1149451967
werb
2006-06-05 00:12
2006.06.25
диаграмма


10-1121066017
xmed
2005-07-11 11:13
2006.06.25
трехзвенная архитектура => Статистика на сервере


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


9-1131538867
VolanD666
2005-11-09 15:21
2006.06.25
Количество теругольников в D3D.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский