4
    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 服务器并读取文件但它得到垃圾我做错了什么?

4

1 回答 1

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()

于 2013-07-15T18:49:01.293 回答