приложение, использующее TIdFTP, не мигрирует с Delphi 5 на Delphi 2009 поврежденные загрузки

Я написал приложение Delphi 5, использующее TIdFTP. он отлично работает годами. его единственная цель - загрузить файл Excel.

object ftp: TIdFTP
  OnStatus = ftpStatus
  IPVersion = Id_IPv4
  AutoLogin = True
  Host = 'somewhere.ca'
  Passive = True
  Password = 'guess'
  TransferType = ftBinary
  Username = 'xray'
  ProxySettings.ProxyType = fpcmNone
  ProxySettings.Port = 0
end

Я недавно перешел на delphi 2009, так как я перезагрузил свою машину, и теперь delphi 5 больше нет.

приложение по-прежнему выглядит так, как будто оно работает, но - большую часть пути через файл размером 1,5 МБ он становится поврежденным. похоже, что байты были удалены, а загруженный файл короче оригинала (примерно на 200 байт).

Моей первой мыслью был тип передачи, поэтому я установил его на двоичный, но кроме этого, я не знаю.

Любые идеи?

Спасибо! mp


person X-Ray    schedule 21.09.2009    source источник


Ответы (4)


Какую версию Indy вы используете? Вы пробовали последнюю версию?
Также пробовали ли вы использовать другие типы файлов (простой текст, исполняемые файлы ...)

person Francesca    schedule 21.09.2009
comment
Спасибо за ваши комментарии! Я использую версию 10.2.5, поставляемую с d2009. Я не хочу использовать последнюю версию, так как ожидаю, что любые уродливые проблемы в копии из установки codegear d2009 будут включены в обновление от codegear. Кроме того, (например, JCL, JVCL) я осторожно отношусь к их обновлению, потому что это может вызвать проблемы. ОЧЕНЬ ИНТЕРЕСНО: EXE и другие файлы Excel загружаются нормально! Я сделал SaveAs для другого имени, и он загружается правильно, если у него другое имя ... больше не пахнет проблемой Indy. спасибо, Франсуа! - person X-Ray; 21.09.2009
comment
10.2.5 очень старый и фактически не поддерживает функции Unicode D2009 +. CodeGear никогда не включает обновления Indy в свои обновления IDE, потому что обновления должны оставаться совместимыми с интерфейсом (а обновления Indy обычно несовместимы с интерфейсом). Вы можете безопасно удалить установку Indy, установленную по умолчанию для CodeGear, и установить новую версию вручную. Текущая версия Indy - 10.5.7. - person Remy Lebeau; 22.09.2009

Большая разница между Delphi 5 и Delphi 2009 заключается в том, что Delphi 2009 использует Unicode. Может быть, вы смешиваете юникод и не-юникод? Получаете ASCII, но обрабатываете его, например, как UTF8?

person Lars Truijens    schedule 21.09.2009

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

-Дон

person Don Dickinson    schedule 21.09.2009
comment
Мне пришлось бы дважды проверить предыдущие версии кода Indy, чтобы быть уверенным, но IIRC была ошибка в более ранней версии Indy 10, когда TIdFTP передавал данные в ASCII, даже если для TransferType было установлено значение Binary (или наоборот, я забыл, какой ). Это было исправлено в более позднем выпуске. - person Remy Lebeau; 22.09.2009

В Delphi 5 еще не установлен компонент Indy. Итак, вам нужно скачать и установить его самостоятельно. Я так и не заставил его работать. Теперь я использую Delphi 7, и он уже предустановлен. Итак, у меня никогда не было проблем с Инди. Только когда скачиваю для использования.

person Mark Johnson    schedule 28.06.2010