2012-03-03 72 views
6

如何獲取當前用戶主目錄的路徑?如何在Windows中獲取當前用戶的主目錄

例如:在Windows中,如果當前用戶是 「客串」 我需要 「C:\用戶\做客」

我的應用程序將在大多數Windows版本(XP,VISTA,WIN 7)的運行。

+1

您是否在尋找當前路徑,或主目錄?如果你希望別人付出努力幫助你,請付出一些努力來問你的問題(和正確的措辭/拼寫)。 – 2012-03-03 01:54:06

+0

我很抱歉。我需要獲取用戶的路徑。在Windows 7中,每個登錄用戶都有一個帳戶在「用戶」文件夾下。如果我的登錄帳戶是HPFE,我需要獲取路徑「C:\ users \ hpfe」。 – Ullan 2012-03-03 01:57:23

回答

11

使用功能SHGetFolderPath。此功能優於查詢環境變量,因爲後者可以修改爲指向錯誤的位置。該文件包含一個例子,我在這裏重複(略作調整):

#include <Shlobj.h> // need to include definitions of constants 

// ..... 

WCHAR path[MAX_PATH]; 
if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_PROFILE, NULL, 0, path))) { 
    ... 
} 
+0

甜美,不知道這個。 – scibuff 2012-03-03 10:46:19

+0

你的意思是,用戶的位置可以配置在任何位置? – Ullan 2012-03-05 23:21:17

+0

感謝您提供更好的解決方案。 – Ullan 2012-03-06 00:05:35

5

只需使用環境變量,在你想%HOMEPATH%這種特殊情況下,並結合起來,與%SystemDrive%

http://en.wikipedia.org/wiki/Environment_variable#Default_Values_on_Microsoft_Windows

+1

有沒有機會,系統驅動器可以是「C:」,HomePath可以是E:\ Users \ {username} – Ullan 2012-03-03 02:03:01

+0

可能 - http://lifehacker.com/5467758/move-the-users-directory-in-windows -7 - 但這只是一個「simlink」,所以C:\ Users將指向E:\ Users,所以路徑將被解決反正 – scibuff 2012-03-03 02:05:14

+0

謝謝。這個快速解決方案將解決我的問題 – Ullan 2012-03-03 02:09:24

1

我已經使用%USERPROFILE%獲得路徑當前用戶的主目錄。

0

方法1:

#include <Shlobj.h> 

std::string desktop_directory(bool path_w) 
{ 
    if (path_w == true) 
    { 
     WCHAR path[MAX_PATH + 1]; 
     if (SHGetSpecialFolderPathW(HWND_DESKTOP, path, CSIDL_DESKTOPDIRECTORY, FALSE)) 
     { 
      std::wstring ws(path); 
      std::string str(ws.begin(), ws.end()); 
      return str; 
     } 
     else return NULL; 
    } 
} 

方法2:

#include <Shlobj.h> 

LPSTR desktop_directory() 
{ 
    static char path[MAX_PATH + 1]; 
    if (SHGetSpecialFolderPathA(HWND_DESKTOP, path, CSIDL_DESKTOPDIRECTORY, FALSE)) return path; 
    else return NULL; 
} 
+0

你能簡單地解釋兩者之間的區別嗎? – 2018-02-07 13:02:04

相關問題