以下代码:
ftp := TIdFTP.Create(nil);
try
ftp.Host := _settings.IP;
ftp.Port := _settings.Port;
ftp.Username := _settings.UserName;
ftp.Password := _settings.Password;
ftp.ConnectTimeout := 3000;
ftp.TransferType := ftBinary;
_log(Format('Connecting FTP server at %s, port %d', [ftp.Host, ftp.Port]));
ftp.Connect();
_log('Connected');
if _isDestroying then Exit;
try
ftp.ChangeDir(_settings.Path);
except
on E: EIdReplyRFCError do begin _logError(Format('Could not change to %s directory', [_settings.Path])); Exit; end;
end;
if _isDestroying then Exit;
ftp.List();
运行完美,直到FTP目录中的文件数量不超过1500。
现在运行ftp.List();
行需要很长时间。老实说,我没看到它跑到最后。
是的,该设备的嵌入式FTP服务器性能不佳:
Win7的内置FTP客户端(ftp.exe
)非常快速地完成运行ls
命令,但是当某个软件(我的应用程序中的TIdFTP或远程管理器中的NetBox)读取文件列表时同时,ls
工具中的ftp.exe
命令运行得慢得多。
有没有办法让文件列表与ftp.exe
一样快,只能解析列表?或者可以异步获取列表项。