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

时间:2013-07-15 18:12:45

标签: c++ qt ftp 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 ;

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

1 个答案:

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