我在Qt写了一个多部分下载器。带有http标题“Range”的多个QNetWorkRequest
用于下载文件。现在我将每个部分(QNetworkReply
)收到的数据写入file.part1,file.part2等。
是否可以同时将数据写入同一文件?我是否必须为它实现锁定,这是在我的应用程序中保存数据的最佳方法?
有什么建议吗?
答案 0 :(得分:0)
为什么不在完成后合并文件部分?您可以轻松地将部件写入QFile
。也许关于方法或数据的某些事情使你无法做到这一点,但如果可以的话,这可能是我在处理将QFile
视为共享资源之前所采取的方法。
如果您希望多个并发回复能够写入并访问QFile
,那么是的,QFile
将成为共享资源。据我所知,你需要锁定它。那时,你有几个选择。您可以让处理回复的插槽尝试获取QSemaphore
,如果您希望锁定互斥锁,则可以使用QMutex
和QMutexLocker
。您可以将它视为多个生产者(各种QNetworkReplys)单个消费者(无论是写入文件的任何问题)(here's a Stack Overflow post提供一些有用的链接),如果您想要走这条路线。简而言之,这里有很多方法,如果你能够走这条路,我认为所有这些方法都比简单地合并file.part
更麻烦。
在同时合并到单个QFile
方面,可能有更简单的Qt方式,但我从未找到它。如果存在这样的方法,也许其他人可以插话。
我不确定你的意思是“哪种方法可以在我的应用程序中保存数据?”您是指持久保存应用程序特定设置吗?如果是,请查看QSettings
。如果您要保存正在下载的数据,我可能会将其写入QFile
,就像您似乎正在做的那样。虽然在不了解更多关于你正在下载的内容的情况下很难确定。