2010-08-13 63 views
6

在Windows上,应用程序数据的标准位置与计算机上的所有用户共享(即在Vista/7中,(root):\ProgramData)。我正在寻找一种在其他使用Qt的平台上获取这样一个文件夹的方法。Linux和Mac OS X的共享数据位置

  • Qt是否提供了一个内置的方法? (QDesktopServices看起来很有希望,但似乎没有提供此选项。)
  • 如果不是,那么Linux和Mac OS X系统上共享应用程序数据的标准位置是什么?是/usr/share正确的地方?有没有标准?

[澄清]这是用于可变数据。

+0

优秀的问题 - 这是很多跨平台开发人员不认为/想要消失的小细节。 – JulesLt 2010-08-14 09:11:05

回答

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/ 

更多信息,请参见this Apple guideline

2

File System Hierarchy Standard建议/usr/share应该用于read-only architecture independent data files,和/var/lib应该用于state information pertaining to an application or the system

您没有指定您是指的是只读还是可变状态,但您的问题的措辞(特别是与%COMMONAPPDATA%的比较)表明可变状态,在这种情况下/var/lib将适用。不要忘记让一个用户组拥有可用的子目录的写入权限(或由软件包安装脚本创建),并让系统管理员将相应的用户添加到该组中。

+0

/var下的各个目录可能就是您要查找的目录。 man hier的输出详细描述了文件层次结构。 – BillThor 2010-08-13 21:28:17

2

在Mac OS上,一种解决方案是使用/ Users/Shared目录,因为它对所有用户都是可读/写的,因此对每个人都是可变的。必须确保您在那里创建的任何文件都可以为每个人读/写。

或者您可以使用其他人建议的应用程序支持,并且让任何文件都需要为每个人都可读/可写,但这意味着管理员需要先通过安装程序或首次运行来创建它们,有点难看。

我的公司正在使用用户/共享的确切目的,但我不知道它是如何“整洁”的考虑。