【问题标题】:QT QNetworkAccessManager to download file from ftp server not workingQT QNetworkAccessManager 从 ftp 服务器下载文件不起作用
【发布时间】:2013-07-15 18:12:45
【问题描述】:
    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 服务器并读取文件但它得到垃圾我做错了什么??

【问题讨论】:

标签: c++ qt ftp qnetworkaccessmanager qnetworkrequest


【解决方案1】:

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

【讨论】:

  • 但是我在一个简单的控制台应用程序中主要执行此操作我没有任何带有插槽的类和信号我将如何连接它们?
  • 那么我会介绍这样的课程。另一种方法是本地事件循环,它是万恶之源。
  • 我像你告诉我的那样创建了类并将插槽和信号连接到对象但是当我阅读文件时我仍然得到垃圾我做错了什么? - -我得到这个输出--------> """"
  • 我让它工作了我检查了错误消息,显然这是文件的权限问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-21
  • 2015-07-27
相关资源
最近更新 更多