2013-07-21 196 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()信號將不會直到這些處理完成。 –