2015-04-06 95 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

相關問題