题
我很快就会构建一个针对 Windows、Mac 和 Linux 的应用程序。我想知道应该在哪里保存应用程序数据,例如设置等。
应用程序的安装文件夹是最简单的选择,但我认为这可能是新的 Vista 安全模型的问题。此外,用户可能需要不同的设置。
C:\Documents and Settings\username\MyApp 对于 Vista 和 XP 都适用吗?/home/username/.MyApp 适用于 Linux 和 Mac 吗?
非常感谢任何想法和/或最佳实践的链接。
谢谢!
胡安
解决方案
每个平台都有自己的 API,用于查找用户的主文件夹、文档文件夹或首选项文件夹。
- 视窗:SHGetFolderPath() 或 SHGetKnownFolderPath()
- Mac OS X 和 iPhone 操作系统:NSSearchPathForDirectoriesInDomains()
- Unix:$HOME环境变量
不要硬编码特定路径或仅在用户名上添加前缀和后缀。另外,请尝试遵循平台的任何约定来命名文件。
其他提示
关于最佳实践,Jeff 发布了一篇关于污染用户空间的文章,您可能会觉得有用: 不要污染用户空间
一般来说,我建议将设置的实现抽象为“设置提供程序”,并为每个平台提供不同的提供程序。这样,您就可以以最适合目标平台的方式实现设置的存储(例如,Linux 上的文件或 Windows 注册表)。
不要简单地采用“最小公分母”。如果您的内容必须显式存储在文件中,请让您的设置提供程序公开这些文件的特定于平台的位置。
我不是 :)
我在 Windows 中使用 USERPROFILE,在 Mac/Linux 中使用 HOME。但即便如此,我也需要知道这些是正确的地方。
谢谢!
在 Windows 中,您需要深入到另一个层次,而不仅仅是用户配置文件。使用应用程序数据文件夹。
在 Windows 上我使用 APPDATA,在 Linux 上我使用 HOME。
对于 Linux/BSD/Solaris:http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
永远不要将用户数据存储在应用程序文件夹中。这只是一个坏主意。
大多数操作系统都有 $HOME(或 %HOME%)环境变量。那将是第一个要看的地方。
但是,如果您想完全支持多个操作系统,则必须为每个操作系统编写一些特定于操作系统的代码,以准确确定需要进行的操作。(Mac OS 为 ~/Library,基于 GNOME 的系统为 ~/.config,Windows 为 %HOME%/Application Data 等)。
您打算使用什么语言?例如,Java 有一个专门的 偏好API.