使用简单的代码,例如:
procedure TForm1.cxButton1Click(Sender: TObject);
begin
ftp.Host := 'domain';
ftp.Username := 'user';
ftp.Password := 'password';
ftp.Connect;
ftp.Put('C:\_Projects\testpicture.JPG');
ftp.Quit;
ftp.Disconnect;
end;
我得到以下结果:
我到底在做什么?
谢谢。
答案 0 :(得分:13)
该应用程序冻结,因为Indy使用阻止操作。代码正在运行时,主消息循环未运行,因此在cxButton1Click()
退出之前不会处理新消息。要解决此问题,请将TIdAntiFreeze
组件放在TForm
上,或者将TIdFTP
代码移至单独的工作线程,然后使用TIdSync
或{{1}在需要时安全地更新UI。
如果您以ASCII模式而不是二进制模式传输文件,该文件将“损坏”。确保TIdNotify
属性设置为TIdFTP.TransferType
。 Indy 9及更早版本默认为ftBinary
,但Indy 10默认为ftBinary
(以匹配FTP协议规范)。