Delphi idftp обработка ошибок

6 / 6 / 1

Регистрация: 18.06.2010

Сообщений: 93

1

03.03.2011, 21:17. Показов 2514. Ответов 4


Студворк — интернет-сервис помощи студентам

Здравствуйте! Необходимо обработать вот такую ошибку Delphi:

Чтоб при появлении такой ошибки не открывалось это окно и программа не закрывалась, а, допустим, открывался showmessage с ошибкой и текстом или еще что-нибудь. Как можно обработать такого рода ошибки?

Добавлено через 7 минут
PS Чтобы именно при ошибке «Bad filename» появлялось определенное окно, а не при любых ошибках



0



2184 / 1254 / 143

Регистрация: 28.04.2010

Сообщений: 4,592

03.03.2011, 23:19

2

а что try except не подходит?



0



6 / 6 / 1

Регистрация: 18.06.2010

Сообщений: 93

04.03.2011, 13:36

 [ТС]

3

anonimus, нет, try except это все ошибки. Мне надо чтобы при ошибке «bad filename» файл переименовывался. Только вот как узнать что это именно эта ошибка, я не знаю.



0



6 / 6 / 1

Регистрация: 18.06.2010

Сообщений: 93

05.03.2011, 17:24

 [ТС]

4

вверх



0



anonimus

2184 / 1254 / 143

Регистрация: 28.04.2010

Сообщений: 4,592

05.03.2011, 23:28

5

ну так в try except можно же использовать
E:Exception Do
например

Delphi
1
2
3
4
5
6
try 
...........
except
    on E : Exception do
      ShowMessage(E.ClassName+' поднята ошибка, с сообщением : '+E.Message);
  end;

E это указатель на объект исключения
и узнаешь что за ошибка



1



Простой пример, основанный на книге “Глубины Инди”

Собственно сам код…

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

function IsFTPServerConnectionOk: Boolean;

begin

Result:=false;

with idFTP do begin

Host:=FTPParams.Host;// ‘localhost’;   //FTP-сервер

Port:=FTPParams.Port;// 22;                  //порт ФТП сервера

Username:=FTPParams.Username;// ‘Логин’;

Password:=FTPParams.Password;// ‘Пароль’;

end;

try

idFTP.Connect;

           try

                 try

                 if IdFTP.Connected then Result:=true;

                 finally

                 idFTP.Disconnect;

                 end;

           except  //Other exceptions

                 on E: EIdException do

                 begin

                 showmessage(E.ClassName+‘ An network error occurred during communication: ‘

                 +#13#10+#13#10+E.Message);

                 end;

                 on E: Exception do

                 begin

                 showmessage(E.ClassName+‘ An unknown error occurred during communication: ‘

                 +#13#10+#13#10+E.Message);

                 end;

           end;

  except // Catching Connection Exceptions

   on E: EIdException do

         begin

          showmessage(E.ClassName+‘ An network error occurred while trying to connect: ‘

                 +#13#10+#13#10+E.Message);

         end;

         on E: Exception do

         begin

            showmessage(E.ClassName+‘An unknown error occurred while trying to connect: ‘

                 +#13#10+#13#10+E.Message);

        end;

end;

end;

Здесь просто возбуждаются исключения. В принципе их можно где-то хранить и как-то обрабатывать. Отделены ошибки соединения от всех остальных ошибок. Но в данном, случае, конечно это перебор, так как единственное, что мы делаем – это только соединяемся с FTP сервером.

Способ №2

Также другой способ – нашел на форуме, просто иллюстрация идеи

http://delphimaster.net/view/6-94986

var B: array [1..3] of Char;

begin

Timer.Enabled:=false; <<<<<<

if FTP.Connected then try

FTP.ReadBuffer(b, 1);

except

meLog.Lines.Add(«НЕТ СОЕДИНЕНИЯ»);

end;

Timer.Enabled:=true; <<<<<<

end

This entry was posted in Delphi, Indy. Bookmark the permalink.

 
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]

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



Форум программистов Vingrad

Модераторы: Snowy, Poseidon, MetalFan

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Перехват ошибок от idFTP 

:(

   

Опции темы

Andreyzpr
Дата 20.7.2007, 17:06 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1

если при работе idFTP возникает какая нибудь проблема (например, нет привелегий для  закачки или не прошол авторизацию) винда выдает ошибку! А как эти ошибки можно перехватить? Тоесть чтобы винда ошибку не выкинула, и в тоже время я мог заменить своим окном!
Какую обработку нада юзать и есть ли расшифровки ErrorCoda для idFTP???

PM MAIL WWW ICQ   Вверх
z-END
Дата 20.7.2007, 17:18 (ссылка)
|   (голосов:1)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

прафесар™
****

Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 1
Всего: 102

читаем про try  except

———————

Каждый чилавек пасвоему праф…а памоему НЕТ! 

PM WWW ICQ   Вверх
_hunter
Дата 20.7.2007, 17:20 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 5
Всего: 98

винда (что бы это нибыло) никаких ошибок не выкидывает: их твоя программа выкидывает.
способ перехвата стандартный: try/catch.

Цитата(Andreyzpr @  20.7.2007,  17:06 Найти цитируемый пост)
 расшифровки ErrorCoda для idFTP??

что такое кода ошибки я не знаю, но если это относится к компоненту — оно есть в его справке…

———————

Tempora mutantur, et nos mutamur in illis…

PM ICQ   Вверх
Andreyzpr
Дата 20.7.2007, 17:30 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 190
Регистрация: 4.2.2007
Где: Украина

Репутация: нет
Всего: 1

z-END где читаем?

_hunter что есть try/catch????????????????

PM MAIL WWW ICQ   Вверх
Snowy
Дата 20.7.2007, 18:17 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 53
Всего: 484

Да где угодно.
В хелпе дельфи, в книге по дельфи, ищем на форуме, в книге по Indy…

PM MAIL   Вверх
Rohoss
Дата 21.7.2007, 01:37 (ссылка)
  | (голосов:1)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Начальник интернета
***

Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: нет
Всего: 18

И пропиши в Uses IdException

———————

Файловый менеджер Explorer.Net скачать  video

PM ICQ   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: Сети»
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »

Can anyone explain to me how to handle errors with TIdFTP?

For example, I try to connect as follows …

with IdFTP do
begin
  Username := xxxxx;
  Password := '1000';
  Host := xxx.xxx.xxx.xxx;
  Port := 21;
  ConnectTimeOut := 5000;
  try
    Connect;
  except
    On E: Exception do
      ShowMessage(E.Message);
  end;
end;

If I use the wrong password (as I have deliberately done in the above example to simulate what might happen if a user provides the wrong password), I get the error «Bad sequence of commands». That tells me nothing about the real problem. Is there any way to get a meaningful description of the actual error, ie: that the password is incorrect?

Понравилась статья? Поделить с друзьями:
  • Delphi getlasterror текст ошибки
  • Delphi exception код ошибки
  • Delphi ds150e коды ошибок
  • Delphi dateseparator ошибка
  • Delphi copyfile коды ошибок