Как получить домашний каталог текущего пользователя в Windows - PullRequest
7 голосов
/ 03 марта 2012

Как я могу получить путь к домашнему каталогу текущего пользователя?

Пример: в Windows, если текущий пользователь "гость", мне нужно "C: \ Users \ guest"

Мое приложение будет работать в большинстве версий Windows (XP, Vista, Win 7).

Ответы [ 4 ]

13 голосов
/ 03 марта 2012

Используйте функцию SHGetFolderPath. Эта функция предпочтительнее, чем запрос переменных среды, поскольку последние могут быть изменены, чтобы указывать на неправильное местоположение. Документация содержит пример, который я повторяю здесь (слегка скорректированный):

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

// .....

WCHAR path[MAX_PATH];
if (SUCCEEDED(SHGetFolderPathW(NULL, CSIDL_PROFILE, NULL, 0, path))) {
  ...
}
5 голосов
/ 03 марта 2012

Просто используйте переменные среды, в данном конкретном случае вы хотите %HOMEPATH% и объедините это с %SystemDrive%

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

3 голосов
/ 31 августа 2015

Я использовал% USERPROFILE%, чтобы получить путь к домашнему каталогу текущего пользователя.

0 голосов
/ 07 февраля 2018

Подход 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...