【问题标题】:Qt5: download a file without saving to HDDQt5:下载文件而不保存到硬盘
【发布时间】:2015-04-06 13:24:50
【问题描述】:

我正在尝试在 Qt5 中下载文件,但下载后该文件不得位于 HDD 上。 澄清一下>我的应用程序将使用下载的文件来更新某些固件,我不希望下载的更新保留在用户的硬盘上,因为它可能会被盗。

所以,我正在尝试从QNetworkReply* 创建一个QFile,但没有将其保存到硬盘上的某个路径。

我正在使用QNetworkAccessManager 下载文件并将数据存储到QNetworkReply。我以前总是用QNetworkReply* 制作QFile,但现在我不能这样做了。

我找到了 QTemporaryFile 类,其中一个文件在使用后立即被删除,但这仍然给用户留下了一些稍后查找文件的选项。

我尝试将 QNetworkReply* 类型转换为 QFile,但未能使其正常工作,似乎 QFile 不能在 HDD 上没有路径。

有没有人知道如何做到这一点,以及如何做到这一点?

谢谢大家。

【问题讨论】:

  • 这个文件有多大?你打算用它的内容做什么?

标签: qt casting qt5 qnetworkaccessmanager qnetworkreply


【解决方案1】:

再次不确定您的预期最终用例,但由于您的数据足够小以保存在内存中,您可以使用QByteArrayQBuffer 并从您的QNetworkReply 写入它。 QBufferQByteArray 提供了一个QIODevice 接口,因此您使用它可能会更容易一些。

确保打开QBuffer 进行读/写。请参阅下面 Qt 文档中的简单示例,http://doc.qt.io/qt-5/qbuffer.html#details,如下:

QBuffer buffer;
char ch;

buffer.open(QBuffer::ReadWrite);
buffer.write("Qt rocks!");
buffer.seek(0);
buffer.getChar(&ch);  // ch == 'Q'
buffer.getChar(&ch);  // ch == 't'
buffer.getChar(&ch);  // ch == ' '
buffer.getChar(&ch);  // ch == 'r'

这应该允许您读取数据并根据需要使用,而无需在系统上创建文件。

【讨论】:

  • 谢谢,我设法将所有下载的内容放入缓冲区,然后从中读取。现在我需要弄清楚如何将缓冲区发送到不同的插槽......再次感谢。
  • 所以,只是在这里发布解决方案......我使用了 QBuffer 类,制作了一个 QBuffer* 并通过信号和插槽发送它,一切似乎都在工作。所有功劳归功于@Matthew
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 1970-01-01
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多