Qt - 如何为多部件下载器保存下载的数据

时间:2012-06-19 15:19:22

标签: qt multipart download-manager qfile

我在Qt写了一个多部分下载器。带有http标题“Range”的多个QNetWorkRequest用于下载文件。现在我将每个部分(QNetworkReply)收到的数据写入file.part1,file.part2等。

是否可以同时将数据写入同一文件?我是否必须为它实现锁定,这是在我的应用程序中保存数据的最佳方法?

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

为什么不在完成后合并文件部分?您可以轻松地将部件写入QFile。也许关于方法或数据的某些事情使你无法做到这一点,但如果可以的话,这可能是我在处理将QFile视为共享资源之前所采取的方法。

如果您希望多个并发回复能够写入并访问QFile,那么是的,QFile将成为共享资源。据我所知,你需要锁定它。那时,你有几个选择。您可以让处理回复的插槽尝试获取QSemaphore,如果您希望锁定互斥锁,则可以使用QMutexQMutexLocker。您可以将它视为多个生产者(各种QNetworkReplys)单个消费者(无论是写入文件的任何问题)(here's a Stack Overflow post提供一些有用的链接),如果您想要走这条路线。简而言之,这里有很多方法,如果你能够走这条路,我认为所有这些方法都比简单地合并file.part更麻烦。

在同时合并到单个QFile方面,可能有更简单的Qt方式,但我从未找到它。如果存在这样的方法,也许其他人可以插话。

我不确定你的意思是“哪种方法可以在我的应用程序中保存数据?”您是指持久保存应用程序特定设置吗?如果是,请查看QSettings。如果您要保存正在下载的数据,我可能会将其写入QFile,就像您似乎正在做的那样。虽然在不了解更多关于你正在下载的内容的情况下很难确定。