我使用Qt編寫多下載。帶有http頭「Range」的多個QNetWorkRequest
用於下載文件。現在我將每個部分(QNetworkReply
)中收到的數據寫入file.part1,file.part2等。Qt的 - 如何保存下載的數據爲多下載
是否可以同時將數據寫入同一文件?我是否必須爲它實現一個鎖,哪一個是將數據保存在我的應用程序中的最佳方式?
有什麼建議嗎?
我使用Qt編寫多下載。帶有http頭「Range」的多個QNetWorkRequest
用於下載文件。現在我將每個部分(QNetworkReply
)中收到的數據寫入file.part1,file.part2等。Qt的 - 如何保存下載的數據爲多下載
是否可以同時將數據寫入同一文件?我是否必須爲它實現一個鎖,哪一個是將數據保存在我的應用程序中的最佳方式?
有什麼建議嗎?
爲什麼不合並文件部分,當你完成?您可以輕鬆將零件寫入QFile
。也許關於方法或數據的一些事情阻止你這樣做,但如果可以的話,這可能是我在處理QFile
作爲共享資源之前要採取的方法。
如果您希望多個併發答覆能夠寫入並訪問QFile
,則是的,QFile
將成爲共享資源。據我所知,你將需要鎖定它。那時候,你有幾個選擇。您可以處理的答覆試圖獲取QSemaphore
插槽(一個或多個),你可以使用QMutex
和QMutexLocker
如果您更願意鎖定互斥。你可以把它當作一個多製片人(各種QNetworkReplys)單次消費(無論是寫入文件)的問題(here's a Stack Overflow post提供一些有用的鏈接),如果你希望走這條路。總之,這裏有很多方法,如果你能夠走這條路線,我認爲所有這些都比簡單地合併file.part
的結果更麻煩。
在合併到一個單一的QFile
同時來講,有可能是做一個更簡單的Qt的方式,但我從來沒有發現它。如果存在這樣的方法,也許其他人可以參與進來。
我不知道你是什麼意思「這是將數據保存在我的應用程序的最佳方式?」您是指以持久方式保存應用程序特定設置?如果是這樣,請查看QSettings
。如果您指的是保存您下載的數據,我可能會將它寫入QFile
,就像您似乎在做的那樣。雖然不知道更多關於你下載的內容的信息很難確定。