HKEY_CURRENT_USER
下,这也是个人资料的一部分。正如 @David 所指出的,您可以使用注册表、文件或者自然而然地使用它们的组合。
如果您选择使用文件,您需要将它们存储在当前用户的文件系统部分。确实,这是一个基本原则,即一个用户不应该影响系统中的任何其他用户,Windows 会强制执行此原则(例如,在没有提升权限的情况下,您无法将文件保存在 Program Files 目录中1)。
例如,我的 AlgoSim 软件可以将其设置存储在
C:\Users\Andreas Rejbrand\AppData\Roaming\Rejbrand\AlgoSim\2.0
文件夹。这是一个典型的例子。您获得目录的第一部分,即,
C:\Users\Andreas Rejbrand\AppData\Roaming
SHGetKnownFolderPath
函数来查找此内容。使用FOLDERID_RoamingAppData
文件夹ID。如果您需要支持早期版本的Windows,则可以使用SHGetFolderPath
并使用CSIDL_APPDATA
常量来替代。
其余路径通常遵循以下模式。
Manufacturer Name\Product Name\Product Version
需要存储哪些文件?最简单的方法是使用老式的INI文件,但您也可以使用XML、自己格式的纯文本文件,甚至是您自己设计的二进制文件。
第二种方法是使用注册表而不是文件。您可能已经知道如何执行此操作。如果不知道,您可以轻松地从示例中学习。例如,我可以将我的每个用户设置存储在
HKEY_CURRENT_USER\Software\Rejbrand\AlgoSim\2.0
1 在这种情况下,操作系统聪明地“模拟”每个用户的“Program Files”文件夹。虽然程序认为它正在从Program Files文件夹读取和写入数据,但实际上它正在读取和写入当前用户部分文件系统中的一个文件夹。这样,旧的和行为不佳的应用程序即使在新版本的Microsoft Windows操作系统中也可以继续工作,并且还开始支持每个用户的设置,这是它们一开始就应该做的。我真的认为这是微软的主要优势,正如我以前所说的那样。
本地应用数据
是用户配置文件的机器特定部分,例如:在正常操作期间可以重新创建的数据,不值得与网络配置文件一起漫游。就像这样。 - Premature OptimizationINI文件对我来说一直表现不错。有TIniFile
,所以你可以很容易地读写文件,分配不存在的值的默认值,并且INI文件是人类可读的格式,用户可以查看并编辑它,如果他想的话。
其他解决方案,如将值存储在注册表中,也是可能的,但通常依赖于操作系统并且有点复杂。如果用户不应能够查看/编辑值,则我会使用此类设置,但您提到的应用程序设置并不是“机密”。