2012-06-19 52 views
2

我使用Qt編寫多下載。帶有http頭「Range」的多個QNetWorkRequest用於下載文件。現在我將每個部分(QNetworkReply)中收到的數據寫入file.part1,file.part2等。Qt的 - 如何保存下載的數據爲多下載

是否可以同時將數據寫入同一文件?我是否必須爲它實現一個鎖,哪一個是將數據保存在我的應用程序中的最佳方式?

有什麼建議嗎?

回答

0

爲什麼不合並文件部分,當你完成?您可以輕鬆將零件寫入QFile。也許關於方法或數據的一些事情阻止你這樣做,但如果可以的話,這可能是我在處理QFile作爲共享資源之前要採取的方法。

如果您希望多個併發答覆能夠寫入並訪問QFile,則是的,QFile將成爲共享資源。據我所知,你將需要鎖定它。那時候,你有幾個選擇。您可以處理的答覆試圖獲取QSemaphore插槽(一個或多個),你可以使用QMutexQMutexLocker如果您更願意鎖定互斥。你可以把它當作一個多製片人(各種QNetworkReplys)單次消費(無論是寫入文件)的問題(here's a Stack Overflow post提供一些有用的鏈接),如果你希望走這條路。總之,這裏有很多方法,如果你能夠走這條路線,我認爲所有這些都比簡單地合併file.part的結果更麻煩。

在合併到一個單一的QFile同時來講,有可能是做一個更簡單的Qt的方式,但我從來沒有發現它。如果存在這樣的方法,也許其他人可以參與進來。

我不知道你是什麼意思「這是將數據保存在我的應用程序的最佳方式?」您是指以持久方式保存應用程序特定設置?如果是這樣,請查看QSettings。如果您指的是保存您下載的數據,我可能會將它寫入QFile,就像您似乎在做的那樣。雖然不知道更多關於你下載的內容的信息很難確定。