2013-07-15 141 views
3
QNetworkAccessManager *nam = new QNetworkAccessManager(); 
    QUrl url2("ftp://127.0.0.1/test.txt/"); 
    url2.setPassword("12345"); 
    url2.setUserName("user"); 
    QNetworkRequest req(url2); 


    QNetworkReply *reply = nam->get(req); 
    QByteArray data = reply->readAll() ; 
    qDebug() << data ; 

它連接到本地ftp服務器並讀取文件,但它會得到垃圾我做錯了什麼?QT QNetworkAccessManager下載文件從FTP服務器不工作

+0

http://stackoverflow.com/questions/14111120/qt-code-to-get-list-of-files-from-ftp-server-using-qnetworkaccessmanager - 我還沒有聽到他們什麼時候會得到要麼 – Huy

回答

5

get()不會立即同步執行GET請求,而只會創建一個QNetworkReply對象,其中實際請求將在稍後的時間點異步執行。

readAll()只讀取給定時間可用的數據,但不會阻止等待更多數據。在創建之後,沒有任何數據可用。

要等待下載的所有數據,連接到finished()error()信號:

connect(reply, SIGNAL(finished()), this, SLOT(requestFinished())); 
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(requestError(QNetworkReply::NetworkError)); 

requestFinished()插槽,那麼你可以使用readAll()。只有在下載小文件時才能正常工作。當下載較大的文件時,最好連接到readyRead()信號並以增量塊處理到達的數據,而不是最後使用單個readAll()

+0

但我這樣做主要在一個簡單的控制檯應用程序我沒有任何類與插槽和信號我將如何連接這些? – user2584587

+0

然後我會介紹這樣的類。另一種選擇是本地事件循環,這是許多弊端的根源。 –

+0

我創造了課堂,並將插槽和信號連接到對象,就像你告訴我的一樣,但當我讀取文件時,我仍然得到垃圾,我做錯了什麼? - - 我得到這個輸出-------->「」「」 – user2584587

相關問題