Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы с кодом ответа FTP-сервера BabyFTP

Delphi , Интернет и Сети , FTP

При использовании встроенного FTP-сервера BabyFTP в приложении Delphi 10.1 Berlin может возникнуть проблема с кодом ответа при успешном выполнении команды MKD. В этом случае BabyFTP возвращает код 250 вместо ожидаемого по RFC и Indy кода 257. В результате TIdFTP выбрасывает исключение EIdReplyRFCError, прерывая работу приложения.

Проблема заключается в том, что Indy имеет жестко зашитые в методах коды ответов, а переопределение TIdFTP не является осуществимым, так как методы не являются виртуальными. Кроме того, настройка кода ответов Indy не представляется возможной. Использование другого FTP-сервера также может привести к аналогичным проблемам.

Решение

Одно из возможных решений - обработать исключение EIdReplyRFCError и проверить его свойство ErrorCode. Если код ошибки равен 250, то исключение можно проигнорировать. Если же код ошибки другой, то исключение следует перевыбросить. Пример кода на Object Pascal (Delphi) представлен ниже:

s := TBytesStream.Create;
Try
  Field.SaveToStream(s);
  Try
    MakeDir(TPath.GetDirectoryName(url));
  Except
    on E: EIdReplyRFCError do
      if E.ErrorCode <> 250 then raise;
  end;
  Put(s, url);
Finally
  s.Free;
End;

Также можно воспользоваться методом SendCmd() напрямую и указать, какие коды ответа считать приемлемыми. Например, чтобы принять коды ответа 250 и 257, можно использовать следующий код:

s := TBytesStream.Create;
Try
  Field.SaveToStream(s);
  SendCmd('MKD ' + TPath.GetDirectoryName(url), [250, 257]);
  Put(s, url);
Finally
  s.Free;
End;

Или принять любые коды ответа, начинающиеся с 2xx, с помощью следующего кода:

s := TBytesStream.Create;
Try
  Field.SaveToStream(s);
  if (SendCmd('MKD ' + TPath.GetDirectoryName(url)) div 100) <> 2 then
    RaiseExceptionForLastCmdResult;
  Put(s, url);
Finally
  s.Free;
End;

Это решение позволяет избежать исключений при работе с FTP-сервером BabyFTP и обеспечивает корректную работу приложения.

Создано по материалам из источника по ссылке.

Устранение проблемы с кодом ответа FTP-сервера BabyFTP в Delphi 10.1 Berlin, возвращающего код 250 вместо ожидаемого по RFC и Indy кода 257 при успешном выполнении команды MKD, что приводит к исключению EIdReplyRFCError и прерыванию работы прило


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: FTP ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:29:52/0.0031940937042236/0