Linux和Mac OS X共享数据的位置

6
在Windows上,有一个标准位置用于应用程序数据,该位置与机器上的所有用户共享(即在Vista/7中,(root):\ProgramData)。我正在寻找一种使用Qt在其他平台上获取此类文件夹的方法。
  • Qt是否提供了内置方法来执行此操作?(QDesktopServices看起来很有前途,但似乎没有提供此选项。)
  • 如果没有,Linux和Mac OS X系统上共享应用程序数据的标准位置是什么?/usr/share是正确的位置吗?是否有任何标准?

[澄清]这是针对可变数据的。


非常好的问题 - 这是许多跨平台开发人员不考虑或希望消失的小细节。 - JulesLt
3个回答

7
我不知道Qt是否提供了相关的API。这里是关于OS X的具体信息。
在OS X上,这取决于它是GUI应用程序还是Unix级别的支持库。对于GUI应用程序而言,通常将所有只读数据放在应用程序包内,以供所有用户共享。通常你会有:
  YourApp.app/
  YourApp.app/Contents
  YourApp.app/Contents/MacOS
  YourApp.app/Contents/MacOS/YouApp      .... this is the binary
  YourApp.app/Contents/Resources/        .... here are all the shared data

GUI将目录YourApp.app作为应用程序本身呈现,因此您可以轻松地复制/移动它而无需担心任何问题。 如果不可能的话,建议使用子目录。
/Library/Application Support/name_of_your_app/

针对用户之间共享的数据,拥有一个可变的、共享的数据是一个不好的想法;通常由于访问限制而不可能实现。请注意,标准用户可能没有(事实上通常没有)将写入共享位置的管理权限。

对于特定用户的可变数据,请使用

~/Library/Application Support/name_of_your_app/

请参阅Apple的指南获取更多信息。


2
在Mac OS上,一种解决方案是使用 /Users/Shared 目录,因为它对所有用户都具有读写权限,因此对于每个人都是可变的。必须确保在其中创建的任何文件对每个人都具有读写权限。
或者,您可以像其他人建议的那样使用应用程序支持,并使您需要可变的文件对每个人都具有读写权限,但这意味着管理员需要首先通过安装程序或第一次运行来创建它们,这有点不太美观。
我的公司正是出于这个目的而使用 Users/Shared 目录,但我不知道它被认为有多“整洁”。

2
文件系统层次标准建议将/usr/share用于只读的与架构无关的数据文件,而将/var/lib用于应用程序或系统相关状态信息
您没有指定是只读状态还是可变状态,但您的问题措辞(特别是与%COMMONAPPDATA%的比较)表明是可变状态,此时使用/var/lib是合适的。不要忘记为您在那里创建的子目录提供具有写权限的用户组(或由软件包安装脚本创建),并让系统管理员将适当的用户添加到该组中。

/var目录下的各个子目录可能是您正在寻找的内容。使用<code>man hier</code>命令可以详细了解文件层次结构。 - BillThor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接