z80*_*rew 5 c++ cross-platform preferences fltk
我正在一个GUI桌面应用程序上工作,该应用程序应在Windows,Mac OS X和Linux上本机运行。在跨平台应用程序中存储首选项的首选方法是什么?我正在使用C ++,但是该问题(及其答案)对于任何本地编译语言都应有效。(有关动态语言和Java的解决方案,请参见此处。)
到目前为止,我的研究告诉我,至少有两种策略:
(A)使用特定于操作系统的API首选项功能。
(B)将首选项存储在适当的(特定于OS的)文件夹中的文件中。
让我们考虑方法(A):我假设这NSUserDefaults
是Mac OS X的正确方法。在Windows系统上,我将通过写入注册表RegOpenKeyEx
。但是,出现了一些问题:是否有与此相对应的可移植Linux API?写入Windows注册表真的是可以应对未来的解决方案吗?
为了简单起见,我倾向于遵循方法(B)。因此,我仅具有特定于操作系统的代码即可获取适当的目录,在该目录中,我可以按照自己选择的格式存储数据。在Windows上,我已经学到了SHGetFolderPath
(或者SHGetKnownFolderPath
对于最近的Windows系统),这CSIDL_LOCAL_APPDATA
是应该走的路。在Mac上,NSSearchPathForDirectoriesInDomains
API调用应该执行相同的操作;尽管使事情变得更复杂,但它是一个Objective-C API。最后,对于Linux版本getenv("HOME")
,getpwuid()
似乎建议使用(并作为备用解决方案)。
总结一下我的问题:
1.是否有任何模式被认为是此任务的最佳实践?
2.是否有C ++类将所有肮脏的事物抽象化,例如找到正确的文件夹?(我遇到了QSetting,但是我使用的是FLTK,我不想更改我的GUI工具包。)
编辑:
“首选项”是指可以由应用程序和用户更改的数据,例如最近文件列表,首选窗口大小等。
我还在开发一组跨平台插件,并完全按照您在方法 (B) 中描述的操作:
我还要指出的是:
~/Library/Preferences
直接访问文件夹,而应该使用他们的 API 来保存首选项值。实际上,这将首选项变成了类似注册表的机制。我非常反感这种做法。我不知道有哪个库可以跨平台方式实现查找当前文件夹。正如您所描述的,使用 SHGetKnownFolderPath 和 NSSearchPathForDirectoriesInDomains 编写此类函数并不难。
归档时间: |
|
查看次数: |
1797 次 |
最近记录: |