QT QNetworkAccessManager从ftp服务器下载文件无法正常工作

use*_*587 4 c++ ftp qt qnetworkaccessmanager qnetworkrequest

    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 ;
Run Code Online (Sandbox Code Playgroud)

它连接到本地ftp服务器并读取文件,但它变得很垃圾,我做错了什么?

Fra*_*eld 5

get()不会立即同步执行GET请求,而只是创建一个QNetworkReply对象,实际请求将在稍后异步执行.

readAll()仅读取给定时间可用的数据,但不阻止等待更多数据.创建后,没有任何可用数据.

要等待下载所有数据,请连接到finished()error()信号:

connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), SLOT(requestError(QNetworkReply::NetworkError));
Run Code Online (Sandbox Code Playgroud)

requestFinished()插槽中,您可以使用readAll().只在下载小文件时才能正常工作.下载较大的文件时,最好连接到readyRead()信号并以增量块处理到达的数据,而不是在最后使用单个数据readAll().