Delphi TclFtp从聪明的组件列表错误“450文件不可用”在特定的FTP

li9yvcax  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(163)

我使用 Delphi 11.2和Clever Internet Suite 10.2。
我有一个程序,复制2个不同的FTP服务器上的一些文件。
然而,当我试图列出文件从ftp文件夹,一个是功能和其他没有。
第一个FTP使用相同的代码,第二个FTP给予“450文件不可用”。
使用的代码。

clFtpMain: TclFtp;

clFtpMain.Server         := 'storage.rcs-rds.ro';
clFtpMain.Port           := 21;
clFtpMain.Username       := 'username';
clFtpMain.Password       := 'pass';
clFtpMain.PassiveMode    := True;
clFtpMain.Timeout        := 10000;
clFtpMain.UseTLS := ctNone;
clFTPMain.Open;
clFTPMain.ChangeCurrentDir('/folder');
clFTPMain.DirectoryListing('*');   // <-- error here

有什么建议吗?

piwo6bdm

piwo6bdm1#

有些FTP服务器很聪明,当没有可用的列表时会发送一个450回复,这样就不必浪费资源创建一个不发送任何东西的数据通道。
而有些FTP服务器总是打开数据连接来发送列表,甚至是空列表。
无论哪种方式,客户端都需要处理这两种情况,但听起来您正在使用的客户端没有将450情况视为非错误。这可能是该组件中的错误。请与其作者联系以获得修复,或使用没有该错误的其他客户端。

vdgimpew

vdgimpew2#

我找到的解决方案是不要在DirectoryListing函数上放置任何过滤器。
显然,输入任何参数都会导致异常。
如果不输入param,列表就可以了,并带来文件(如果存在)。

clFTPMain.DirectoryListing('');   // <-- working

相关问题