2015-04-06 94 views
0

我试图在Qt5下载文件,但下载后文件不能位于硬盘上。 澄清>我的应用程序将使用下载的文件来更新一些固件,我不希望下载的更新留在用户的硬盘上,因为它可能会被盗。Qt5:在不保存到硬盘的情况下下载文件

所以,我试图从QNetworkReply*作出QFile,但没有将它保存到硬盘上的某个路径。

我正在使用QNetworkAccessManager下载文件并将数据存储到QNetworkReply。我总是用作为QNetworkReply*,但现在我无法做到这一点。

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

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

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

谢谢大家。

+0

这个文件有多大?你打算如何处理它的内容? – Matthew 2015-04-06 17:58:36

+0

<1 MB。它应该通过USB复制到设备(作为软件更新)。 这就是为什么我不能留下任何痕迹,因为有人可能会偷走我的工作。 你可以查看我的其他问题来获得一个想法。 – Rorschach 2015-04-06 18:14:00

回答

2

再次不确定您的预期最终用例,但由于您的数据足够小以容纳内存,您可以使用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' 

这应该让你读回的数据,并根据需要在不创建系统上的文件使用。

+0

谢谢,我设法将所有下载的东西放入缓冲区,然后从中读回。现在我需要弄清楚如何通过不同的插槽发送缓冲区... 再次,谢谢。 – Rorschach 2015-04-07 09:35:05

+0

所以,只是在这里发布的解决方案... 我使用QBuffer类,做了一个QBuffer *并发送它槽信号和插槽,并且一切似乎工作。 所有功劳归于@Matthew – Rorschach 2015-04-08 10:48:41

相关问题