2012-03-03 188 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

相关问题