Получение user home dir (Желательно переносимое решение...)

Модератор: Модераторы разделов

Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Получение user home dir

Сообщение deninok »

Уважаемые участники форума!

Простой вопрос: как в С++ получить путь к домашней директории текущего пользователя (от имени которого запускается программа)? В QDir сделать это элементарно. Но я не могу использовать Qt. Может, в Boost Filesystem есть решение? Я искал, но так и не нашёл.

Может, кто-нибудь решал такую проблему?

P.S. В идеале решение должно быть переносимым, то есть пригодным и для Windows...
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Получение user home dir

Сообщение deninok »

В принципе, решение нашёл:
string home_dir( getenv( "HOME" ) );
Я знаю, что это прекрасно работает в Linux, но как насчёт Windows. Никто не пробовал?
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: Получение user home dir

Сообщение sim1 »

deninok писал(а): ↑
09.06.2009 16:53
В принципе, решение нашёл:
string home_dir( getenv( "HOME" ) );
Я знаю, что это прекрасно работает в Linux, но как насчёт Windows. Никто не пробовал?

В винде будет работать только если выставлена переменная окружения home.
По дефолту, она конечно же не выставляется..

сейчас посмотрел в винде подефолту выставлены переменные окружения HOMEPATH и HOMEDRIVE
Спасибо сказали:
Аватара пользователя
deninok
Сообщения: 585
Статус: Программист С++
ОС: Debian GNU/Linux

Re: Получение user home dir

Сообщение deninok »

Ага, то есть можно сделать так:

Код: Выделить всё

#if defined(WIN32)
     home_dir = getenv( "HOMEPATH" )
#else
     home_dir = getenv( "HOME" );
#endif

Верно?
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: Получение user home dir

Сообщение sim1 »

deninok писал(а): ↑
09.06.2009 17:16
Ага, то есть можно сделать так:

Код: Выделить всё

#if defined(WIN32)
     home_dir = getenv( "HOMEPATH" )
#else
     home_dir = getenv( "HOME" );
#endif

Верно?

Верно, но HOMEPATH не всегда задан, сейчас точно не помню в каких случаях она не определяется...
По моему если машина включена в домен, то тогда данная переменная пустая.
Спасибо сказали:
Аватара пользователя
Женя Подсыпальников
Сообщения: 482

Re: Получение user home dir

Сообщение Женя Подсыпальников »

Код: Выделить всё

#ifdef WIN32
    TCHAR home_dir[MAX_PATH] = { 0 };
    if (FAILED(SHGetFolderPath(NULL, CSIDL_PROFILE, NULL, 0, home_dir)) {
      // не везло...
    }
#else
...
#endif


Однако, замечается:
Applications should not create files or folders at this level;
they should put their data under the locations referred to by CSIDL_APPDATA or CSIDL_LOCAL_APPDATA.


:)
Пойдём на рыбалку !
Спасибо сказали: