2013-07-21 5 views
1

서버에있는 디렉토리의 모든 파일을 다운로드하고 싶습니다.QFtp로 디렉토리 다운로드

_ftp->list("myDirectory/"); 

내가 신호 listInfo를 연결하고이 같은 슬롯 구현 : 그래서, 난 할

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 명령은 예약되고 비동기 적으로 수행됩니다. 마지막 보류 명령이 완료되면 QFtpdone(bool error) 신호를 내 보냅니다. 따라서 LIST 명령을 실행하기 전에 적절한 신호를이 신호에 연결하면 모든 명령이 끝났음을 알리는 메시지가 나타납니다. 완료되면 신호를 끊는 것을 잊지 마십시오.

+0

첫 번째 GET 명령을 예약하기 전에 LIST 명령이 완료되지 않았습니까? 이 경우 다운로드가 완료되지 않은 반면 '완료'신호가 방출됩니다. 그렇지 않습니까? – federem

+1

QFtp의 소스 코드를 살펴 보았는데 LIST 명령이 처리되는 동안 listinfo() 신호가 트리거 된 것처럼 보입니다. 즉, LIST 명령이 완료되기 전에 on_listInfo() 슬롯이 호출되고 GET 명령이 모든 디렉토리 항목에 대해 대기합니다. 즉, 모든 GET 명령이 이번까지 대기열에 있고 done() 신호는 대기열에 저장되지 않습니다. 처리 될 때까지 방출됩니다. –

관련 문제