请帮我思考一下问题。我有一个用C ++ / Qt编写的应用程序(我们称之为X
),它应该存储并定期更新有关用户系统上安装的所有应用程序的信息。在Linux上,根据.desktop
推荐来解析所有FreeDesktop.org
文件需要花费太多时间 - 在我的计算机上大约需要2-3秒。所以,我决定使用缓存来处理文件。
缓存应如何运作:
(注意, app file 是一个文件,其中包含有关用户系统上安装的应用程序的信息。例如,在Linux上,它可能是.desktop
文件,在Windows上 - {{1文件等。)
.lnk
目录)。/usr/share/application
启动时,它会遍历该列表中的所有文件夹,并创建所有文件的“快照”。快照应该是包含文件的完整路径和X
次的记录列表。然后,last modified
解析快照中的所有文件,并将所需信息保存在,假设为X
列表。appsInformation
会为该文件夹中的文件创建新快照。然后,它将新快照与旧快照进行比较,并创建三个更改列表:X
列表,其中包含新快照中存在但不存在于旧快照中的所有应用程序文件一; added
列表,其中包含已更改modified
时间的所有应用文件;和last modified
列表,其中包含旧快照中存在但不在新快照中的所有应用程序文件。之后,它解析deleted
列表中新文件的信息并将其推回added
列表,根据appsInformation
列表更改appsInformation
列表中已有的记录,并删除modified
列表中与appsInformation
列表中的文件匹配的现有记录。所以,我需要有两个文件系统快照,其中一个以某种方式连接到deleted
列表。
以下是我的问题:我应该使用哪些方法和工具来构建所有这些架构?在结果中,使用快照的速度应至少比解析所有速度快两倍文件。我想到了一些想法,但它们真的很丑陋且难以释放。我应该使用几个appsInformation
个对象,每个对象包含一个文件信息和指向QList
记录的指针吗?或者有一个更好的主意?谢谢你的帮助。
答案 0 :(得分:1)
我不会首先使用民意调查。相反,我会使用一些基于回调的文件系统监控库。 Windows和Linux都已经有了这个,请看这些问题的答案:
使用这些库安装的回调通常不仅会被告知哪个文件发生了变化,而且还会告诉我们有关变更的一些细节;即添加,删除或更改文件。因此,根据“更改类型”,您可以添加/删除/修改appsInformationList
中的元素。