2010-08-13 64 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目錄,因爲它對所有用戶都是可讀/寫的,因此對每個人都是可變的。必須確保您在那裏創建的任何文件都可以爲每個人讀/寫。

或者您可以使用其他人建議的應用程序支持,並且讓任何文件都需要爲每個人都可讀/可寫,但這意味着管理員需要先通過安裝程序或首次運行來創建它們,有點難看。

我的公司正在使用用戶/共享的確切目的,但我不知道它是如何「整潔」的考慮。