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服务器并读取文件,但它变得很垃圾,我做错了什么?
答案 0 :(得分: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()
。