我正在尝试在Qt5中下载文件,但下载后该文件不得位于硬盘上。 为了澄清>我的应用程序将使用下载的文件来更新某些固件,我不希望下载的更新保留在用户的硬盘上,因为它可能会被盗。
所以,我正在尝试从QFile
创建一个QNetworkReply*
但不保存到硬盘上的某个路径。
我正在使用QNetworkAccessManager
下载文件并将数据存储到QNetworkReply
。我总是习惯用QFile
制作QNetworkReply*
,但现在我不能这样做。
我找到了QTemporaryFile
类,在使用它之后立即删除了一个文件,但是这仍然留给用户以后查找文件的一些选项。
我尝试将QNetworkReply*
作为QFile
进行类型转换,但没有设法让它工作,似乎QFile不能没有硬盘上的路径。
有没有人有任何想法如何做到这一点,以及如何?
谢谢大家。
答案 0 :(得分:2)
再次不确定您的预期最终用例,但由于您的数据足够小以容纳在内存中,您可以使用QByteArray或QBuffer并从QNetworkReply
写入。 QBuffer
为QIODevice
提供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'
这应该允许您回读数据并根据需要使用而无需在系统上创建文件。