Qt 使用QFtp下载目录

Qt 使用QFtp下载目录,qt,ftp,qftp,Qt,Ftp,Qftp,我想下载服务器中某个目录的所有文件。因此,我确实: _ftp->list("myDirectory/"); 我连接了信号列表信息,我实现了如下插槽: void manageFTP::on_listInfo(QUrlInfo info) { if (!info.isDir()) { QString remoteFile= "remote"; QFile *file = new QFile(info.name()); if (

我想下载服务器中某个目录的所有文件。因此,我确实:

_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。我如何知道并确保下载已完成?

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

列表命令不可能在计划第一个GET命令之前完成吗?在这种情况下,将发出信号
done
,而下载尚未完成,不是吗?我刚刚快速查看了QFtp的源代码,似乎在处理LIST命令时触发了listinfo()信号。这意味着您的on_listInfo()插槽将被调用,并且在LIST命令完成之前,GET命令将排队等待所有目录条目,也就是说,此时所有GET命令都将在队列中,并且在处理完这些命令之前不会发出done()信号。