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