请帮助我思考一个问题。我有一个用 C++/Qt 编写的应用程序(让我们称之为X
),它应该存储并定期更新有关用户系统上安装的所有应用程序的信息。.desktop
在 Linux 上,根据建议解析所有文件需要太多时间FreeDesktop.org
——在我的计算机上大约需要 2-3 秒。所以,我决定使用缓存来处理文件。
缓存应该如何工作:
(注意,app 文件是一个文件,其中包含有关安装在用户系统上的应用程序的信息。例如,在 Linux 上可能是.desktop
文件,在 Windows 上可能是文件.lnk
等)
- 开始时,当应用程序文件位于用户系统上时,我们有一个目录列表(例如,在 Linux 上,该列表包括
/usr/share/application
目录)。 - 一
X
开始,它会遍历该列表中的所有文件夹并创建所有文件的“快照”。快照应该是包含文件完整路径和last modified
时间的记录列表。然后,X
解析快照中的所有文件并将必要的信息保存在假设appsInformation
列表中。 - 一段时间后,
X
在该文件夹中创建文件的新快照。然后,它将新快照与旧快照进行比较,并创建三个更改列表:added
列表,包含新快照中存在但旧快照中不存在的所有应用程序文件;modified
列表,包含所有更改时间的应用程序文件;last modified
和deleted
列表,其中包含旧快照中存在但新快照中不存在的所有应用程序文件。之后,它会从列表中的新文件中解析信息added
并将其推送回列表,根据appsInformation
列表更改列表中已存在的记录,并删除列表中与列表中文件匹配的现有记录。appsInformation
modified
appsInformation
deleted
所以,我需要有两个文件系统快照,其中一个以某种方式连接到appsInformation
列表。
我的问题是:我应该使用什么方法和工具来最好地构建所有这些架构?因此,使用快照应该至少比解析所有文件快两倍。我想过一些想法,但它们真的很丑陋且难以发布。我应该使用几个QList
对象,每个对象都包含一个文件信息和一个指向appsInformation
记录的指针吗?还是有更好的主意?谢谢您的帮助。