2013-07-21 194 views
1

我想下载服务器中目录的所有文件。所以,我做的:使用QFtp下载目录

_ftp->list("myDirectory/"); 

我连接信号列表信息,和我实现这样的插槽:

void manageFTP::on_listInfo(QUrlInfo info) 
{ 
    if (!info.isDir()) 
    { 
     QString remoteFile= "remote"; 
     QFile *file = new QFile(info.name()); 
     if (file ->open(QIODevice::ReadWrite)) 
      _ftp->get(remoteFile, file); 
    } 
} 

我的问题是要知道什么时候下载全部完成,因为我不知道目录中有多少个文件,我不知道ID的最后得到。我如何知道并确保下载已完成?

回答

0

您的LIST和GET命令被安排并异步执行。当最后的挂起命令完成时QFtp发出done(bool error)信号。因此,在执行LIST命令之前,只需将适当的插槽连接到此信号,并在您的所有命令完成时收到通知。完成后不要忘记断开信号。

+0

在计划第一个GET命令之前,LIST命令不可能完成吗?在这种情况下,会发出'done'信号,而下载没有完成,不是吗? – federem

+1

我只是快速浏览了QFtp的源代码,看起来像在处理LIST命令时触发listinfo()信号。这意味着您的on_listInfo()插槽将被调用,并且GET命令将在LIST命令完成之前排队等待所有目录条目,即此时所有GET命令都将在队列中,并且done()信号将不会直到这些处理完成。 –