2012-07-12 45 views
0

我正在嘗試獲取Windows用戶配置文件路徑的父文件夾。但我找不到任何「參數」來使用SHGetSpecialFolderPath,到目前爲止我使用的是CSIDL_PROFILE如何使用C++獲取Windows用戶配置文件路徑的父文件夾

預期路徑:

Win7的 - 「C:\用戶」

的Windows XP - 「C:\ Documents和設置」

+0

僅限當前用戶或可能是其他用戶? – 0xC0000022L 2012-07-12 18:29:06

+0

例如:我正在使用CSIDL_PROFILE獲取當前用戶路徑,我正在尋找類似的方式來獲取當前用戶配置文件路徑的父文件夾。 – JChan 2012-07-12 18:33:33

+0

你想要父路徑。這把我扔了。此外,關於'CSIDL_PROFILE'的這些信息屬於*你的問題。我在問題中解決了這個問題。如果我有什麼問題,請閱讀並更正。 – 0xC0000022L 2012-07-12 18:34:26

回答

0

6.0外殼libary版本,您有CSIDL_PROFILES(不要與CSIDL_PROFILE混淆),它給你你想要的。此值已刪除(請參閱here),您必須使用自己的解決方法。

在你要實現自己的解決辦法,比如尋找可能的路徑分隔符(S),即在Windows \/,並在最後一個結束的字符串的任何先前的版本。一個簡單的版本可以使用strrchr(或wcsrchr)來定位反斜槓,然後(假設字符串是可寫的)終止該位置處的字符串。

例子:

char* path; 
// Retrieve the path at this point, e.g. "C:\\Users\\username" 
char* lastSlash = strrchr(path, '\\'); 
if(!lastSlash) 
    lastSlash = strrchr(path, '/'); 
if(lastSlash) 
    *lastSlash = 0; 

當然GetProfilesDirectory(即躲避我),你在這個答案評論指出,或。

+0

謝謝@ ox0000022l,GetProfilesDirectory也會這樣做。 – JChan 2012-07-12 19:40:53

+0

@JChan:很好的電話,爲了完整性將它編輯成我的答案。這可能就是爲什麼'CSIDL_PROFILES'被快速報廢的原因。 – 0xC0000022L 2012-07-12 19:43:57

1

對於除了向用戶顯示路徑之外的大多數用途,它應該將"\\.."(或"..\\",如果以反斜槓結尾)附加到相關路徑。

相關問題