2012-02-02 62 views
1
SHGetSpecialFolderPathA(NULL,buffer, CSIDL_APPDATA,FALSE); 

C:\Users\guest\AppData\Roaming如何獲得應用程序數據路徑

SHGetSpecialFolderPathA(NULL,buffer, CSIDL_LOCAL_APPDATA,FALSE); 

C:\Users\guest\AppData\Local

有沒有辦法讓使用Windows API的路徑C:\Users\guest\AppData

+0

爲什麼你想要它? – Cameron 2012-02-02 20:49:57

+0

我想避免任何來自Appdata的文件夾。即如果用戶在AppaData下選擇了任何文件夾,我必須跳過這些文件。 – Ullan 2012-02-02 20:52:31

+2

今天HPFE455詢問的另一個問題是在Win7上尋找Temp文件夾。如果這與相同的項目有關,自Vista以來已棄用SHGetSpecialFolderPath。搜索MSDN文檔將回答這個和許多相關的問題。 – 2012-02-02 21:16:41

回答

3

漫遊和本地文件夾的存在是有原因的,有時您可能需要在配置文件的根目錄中放置某些內容,但您並不是真的應該這樣做。這是MSDN有關CSIDL_PROFILE的說法:

應用程序不應該在此級別創建文件或文件夾;他們 應該將他們的數據放在CSIDL_APPDATA 或CSIDL_LOCAL_APPDATA引用的位置下。但是,如果要創建新的已知文件夾,則由CSIDL_PROFILE引用的配置文件根目錄是合適的。

在NT5他們甚至不具有相同的父文件夾和「漫遊」是在配置文件的根:

C:\Documents and Settings\username\Application Data 
C:\Documents and Settings\username\Local Settings\Application Data 

用戶和/或域管理員可以移動和/或重定向這些文件夾到任何地方,到另一個驅動器或網絡共享的根目錄。

唯一有文字記錄的方式我能想到的尋父是使用IKnownFolderManager::GetFolder,然後調用IKnownFolder::GetFolderDefinition看看KNOWNFOLDER_DEFINITION.fidParent(請記住,有沒有被父母,IKnownFolderManager ::重定向以一個字符串作爲目標因此重定向的文件夾可以在任何地方)

如果要排除一個特殊的外殼文件夾下的文件,你應該像PathCommonPrefixIKnownFolderManager::FindFolderFromPath比較路徑。

相關問題