2013-07-15 104 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

相关问题