Qt5:下载文件而不保存到HDD

时间:2015-04-06 13:24:51

标签: qt casting qt5 qnetworkaccessmanager qnetworkreply

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

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

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

我找到了QTemporaryFile类,在使用它之后立即删除了一个文件,但是这仍然留给用户以后查找文件的一些选项。

我尝试将QNetworkReply*作为QFile进行类型转换,但没有设法让它工作,似乎QFile不能没有硬盘上的路径。

有没有人有任何想法如何做到这一点,以及如何?

谢谢大家。

1 个答案:

答案 0 :(得分:2)

再次不确定您的预期最终用例,但由于您的数据足够小以容纳在内存中,您可以使用QByteArrayQBuffer并从QNetworkReply写入。 QBufferQIODevice提供QByteArray界面,因此您可以更轻松地使用它。

确保打开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'

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