跨平台应用程序应将数据保存在哪里?

跨平台应用程序应将数据保存在哪里?

Where should cross-platform apps keep their data?

我正在构建一个针对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环境变量

请勿硬编码特定路径,或仅在用户名上添加前缀和后缀。另外,请尝试遵循平台命名文件的所有约定。


关于最佳实践,Jeff发表了一篇关于污染用户空间的文章,您可能会发现它有用:不要污染用户空间


通常,我建议将设置的实现抽象为"设置提供程序",并为每个平台提供不同的提供程序。这样,您可以以最适合目标平台的方式来实现设置的存储(例如,Linux或Windows注册表上的文件)。

不要简单地采用"最低公分母"。如果您的内容必须明确存储在文件中,请让设置提供程序公开这些文件的特定于平台的位置。


对于Linux / BSD / Solaris:
http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html


在Windows上,我使用APPDATA,在Linux上,我使用HOME。


在Windows中,您不仅需要进入用户配置文件,还需要进入另一个层次。使用应用程序数据文件夹。


我不是 :)

我在Windows中使用USERPROFILE,在Mac / Linux中使用HOME。但是即使如此,我仍然需要知道那些地方是正确的。

谢谢!


您打算使用哪种语言?例如,Java具有专用的首选项API。


永远不要将用户数据存储在应用程序文件夹中。这是一个坏主意。

大多数操作系统都有$ HOME(或%HOME%)环境变量。那将是第一个看到的地方。

但是,如果您要完全支持多个操作系统,则必须为每个操作系统提供一些特定于操作系统的代码,以准确地确定需要处理的事情。 (对于Mac OS是?/ Library,对于基于GNOME的系统是?/ .config,对于Windows是%HOME%/ Application Data,等等)。


推荐阅读

    linux设置路由器命令?

    linux设置路由器命令?,网络,信息,代码,地址,电脑,工作,环境,系统,密码,路由,l

    linux设置根命令过短?

    linux设置根命令过短?,系统,工作,软件,地址,命令,代码,情况,管理,基础,位置,3

    linux设置路由器命令?

    linux设置路由器命令?,网络,信息,代码,地址,电脑,工作,环境,系统,密码,路由,l

    linux命令大全数据库?

    linux命令大全数据库?,服务,系统,平台,状态,软件,通用,环境,数据,神州,地址,

    linux上数据库的命令?

    linux上数据库的命令?,服务,系统,信息,地址,命令,密码,工具,管理,数据,单位,

    linux命令dm数据库?

    linux命令dm数据库?,地址,软件,时间,设备,名字,服务,位置,名称,公司,命令,lin

    linux命令行设置字体?

    linux命令行设置字体?,系统,工具,终端,软件,电脑,数字,位置,等级,字体,命令,L

    linux命令快捷设置?

    linux命令快捷设置?,第一,系统,名称,终端,发行,首页,命令,快捷键,窗口,桌面,l

    linux存储数据命令?

    linux存储数据命令?,系统,管理,数据,设备,情况,地址,工作,命令,服务,平台,Lin

    linux命令设置扩展屏?

    linux命令设置扩展屏?,工具,系统,电脑,技术,软件,装备,情况,工作,命令,显示

    linux命令设置自启动?

    linux命令设置自启动?,服务,系统,信息,数字,检测,工具,状态,密码,跨行,脚本,l

    linux数据库查找命令?

    linux数据库查找命令?,位置,名称,状态,服务,软件,信息,系统,命令,名字,密码,

    linux设置命令在哪里?

    linux设置命令在哪里?,系统,地址,代码,管理,密码,命令,位置,名字,服务,分行,l

    linux数据库同步命令?

    linux数据库同步命令?,信息,系统,汽车,车辆,服务,工作,通信,一致,分析,数据,D

    linux命令设置中文?

    linux命令设置中文?,系统,工作,数据,管理,设备,环境,标的,第一,网上,模式,lin

    设置网址命令linux?

    设置网址命令linux?,地址,系统,网络,代码,网址,密码,信息,电脑,管理,基础,lin

    linux建立数据库命令?

    linux建立数据库命令?,软件,系统,工作,数据,密码,工具,数据库,一致,网络,服

    linux命令进数据库?

    linux命令进数据库?,地址,系统,名字,服务,密码,命令,读法,数据库,操作系统,

    linux设置日期命令?

    linux设置日期命令?,时间,系统,标准,命令,信息,大陆,国家,日期,时钟,时区,详