2010-04-06 93 views
6

完全不是一個編程問題,但它足夠近所以這裏有雲:Windows應用程序數據目錄

在Mac OS我會把用戶特定的文件我的應用程序在~/Library/Application Data/{MyApp}/和* nix中我將把它們放在在~/.{MyApp}/ - 我應該把它們放在Windows中?

我將使用Ruby的File.expand_path來到這個目錄,所以如果有一個相當於~的窗口,那很好。

(如果他們是不一樣的答案適用於Windows XP,Vista和Windows 7,將不勝感激)

回答

3

在Windows上這樣做的方式是使用ApplicationData環境變量。如果您使用的是C#,則可以使用System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)獲取它映射到的文件夾,使用Google搜索等同於ENV['APPDATA']。在英語版Windows將其映射到:

C:\Users\%username%\AppData\Roaming\(在Vista和Windows 7)

C:\Documents and Settings\%username%\Application Data\(XP系統)

它可以映射到其他語言不同的文件夾,但只要你從環境變量中獲取目錄,而不是對它進行硬編碼,那麼它確實沒有什麼區別。如果您在那裏爲您的應用程序創建文件夾並將數據存儲在那裏,則Vista和7將允許讀取和寫入訪問,而不會提供UAC提示。

+1

只是請不要硬編碼miket2e列出的路徑 - 而是使用Environment.SpecialFolder.ApplicationData .net應用程序或ShGetFolderPath(NULL,CSIDL_APPDATA,NULL,...)作爲本地Windows應用程序。 – 2010-04-06 23:28:03

+0

在Ruby中?此刻我必須對〜/ AppData/MyApp進行硬編碼,因爲我知道無法訪問Ruby中的應用程序數據文件夾! – 2010-04-14 12:54:02

0

隨口說說,我不知道紅寶石如何處理上〜expand_path的Windows。 Windows有這樣的功能,如SHGetSpecialFolderPathSHGetSpecialFolderLocation。對於expand_path來說,使用其中一個看起來很明顯,但我不知道它是否確實如此。

+1

One nit,但不建議使用SHGetSpecialFolderPath以支持ShGetFolderPath(http://msdn.microsoft.com/zh-cn/library/bb762181(VS.85).aspx)。 – 2010-04-06 23:28:54

+0

@Larry:好點 - 我應該提到這一點。感謝您添加它。 – 2010-04-07 02:19:52

0

對於Vista和Windows 7和Windows XP,

char appdir[MAX_PATH];  
    size_t requiredSize; 
    errno_t err= getenv_s(&requiredSize, appdir, MAX_PATH, "appdata"); 

似乎比使用棄用的API或那些不能在Windows XP的工作更簡單。

相關問題