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