使用QFtp,abort list()命令

时间:2014-05-12 09:36:22

标签: c++ qt ftp

我实际上想要从ftp服务器获取最新文件。为此,我目前正在使用QFtp访问服务器并检索我需要的内容。

这就是我所做的(每3分钟一次):

  • 连接&对服务器进行身份验证。

  • list()命令列出所有文件。

  • list()命令列出的每个文件我调用一个插槽来验证当前列出的文件是否尚未下载(我依赖于文件的日期)。如果文件足够新,我会下载它。

所以,它有效。但它确实很慢,因为服务器上有数千个文件,每次我都会验证每个文件的日期。是否可以中止list()命令,例如当我发现文件太旧时?或者还有另一种更聪明的方法可以加快这个过程吗?

1 个答案:

答案 0 :(得分:0)

是的,有一种方法可以中止长时间播放命令。当你调用QFtp :: list()时,它会在Ftp服务器上启动执行命令,如果命令找到一个条目,QFtp会发出QFtp::listInfo(const QUrlInfo &)信号。您可以处理该信号,并检查QUrlInfo::lastModified()返回的时间是否过长。如果是,则可以调用QFtp::abort()函数中止列表命令在服务器上的执行。以下是示例代码:

建立连接以处理ftp信号

connect(ftp, SIGNAL(listInfo(const QUrlInfo &)),
        this, SLOT(onNewEntry(const QUrlInfo &)));

listInfo信号处理槽的实现:

void MyFtp::onNewEntry(const QUrlInfo &url)
{
    // If url.lastModified() is less than some time
    // ftp->abort();    
}