2012-05-10 85 views
1

我想使用的idFTP组件上传文件,并定义了什么,我可以作为基本属性,这样看:使用idFTP上传文件

FTPClient.Host := tblFtpFTPHost.AsString; 
    FTPClient.Username := tblFTPUsername.AsString; 
    FTPClient.Password := tblFTPPassword.AsString; 
    FTPClient.Port  := tblFTPPort.AsInteger; 

然而,当我运行命令 -

FTPClient.Connect; 

它会失败,出现以下错误信息:

Project Uploader.exe raised exception class EIdPortRequired with message ''. 

我不是提供信息正确的属性?我的表单上是否需要另一个组件才能上传文件?

我目前使用Delphi XE作为我的IDE。

谢谢。

+0

我有一个小的怀疑你没有在这里讲完整个故事。 Indy代码源代码清楚地表明端口值真的是0.请逐步调试您的代码并添加一个端口值的手表 – whosrdaddy

回答

3

看来,你的端口值是0 这是印地抛出这个异常的惟一地方:

procedure TIdTCPClientCustom.Connect; 
begin 
    // Do not call Connected here, it will call CheckDisconnect 
    if Connected then begin 
    EIdAlreadyConnected.Toss(RSAlreadyConnected); 
    end; 

    if Host = '' then begin 
    EIdHostRequired.Toss(''); 
    end; 
    if Port = 0 then begin 
    EIdPortRequired.Toss(''); 
    end; 
... 

请检查端口值不为0

+0

我已经检查了这一点,我正在分配端口。查看上面的代码,idFTP组件没有.connect事件。 – MrDKOz

+1

就像@whosrdaddy说的那样,'EIdPortRequired'异常可以引发的唯一方式是如果将0赋给'TIdFTP.Port'属性。并且,“TIdFTP”确实有一个已发布的'OnConnected'事件,它在TIdTCPClientCustom.Connect()'退出之前触发,但不会在该事件中执行任何FTP命令,例如'TIdFTP.Connect()' 'TIdTCPClientCustom.Connect()'内部)仍在运行,尚未完成FTP会话的特性设置。等到'TIdFTP.Connect()'退出之后再开始发出命令。 –

+3

我认为空的异常消息对人们来说是一件糟糕的事情。它应该是EIdHostRequired.Toss(rsMustSetHostValue),其中rsMustSetHostValue是资源字符串或资源ID常量 –