Уважаемые участники форума!
Простой вопрос: как в С++ получить путь к домашней директории текущего пользователя (от имени которого запускается программа)? В QDir сделать это элементарно. Но я не могу использовать Qt. Может, в Boost Filesystem есть решение? Я искал, но так и не нашёл.
Может, кто-нибудь решал такую проблему?
P.S. В идеале решение должно быть переносимым, то есть пригодным и для Windows...
Получение user home dir (Желательно переносимое решение...)
Модератор: Модераторы разделов
-
deninok
- Сообщения: 585
- Статус: Программист С++
- ОС: Debian GNU/Linux
-
deninok
- Сообщения: 585
- Статус: Программист С++
- ОС: Debian GNU/Linux
Re: Получение user home dir
В принципе, решение нашёл:
string home_dir( getenv( "HOME" ) );
Я знаю, что это прекрасно работает в Linux, но как насчёт Windows. Никто не пробовал?
string home_dir( getenv( "HOME" ) );
Я знаю, что это прекрасно работает в Linux, но как насчёт Windows. Никто не пробовал?
-
sim1
- Сообщения: 155
- ОС: GNU,BSD
Re: Получение user home dir
В винде будет работать только если выставлена переменная окружения home.
По дефолту, она конечно же не выставляется..
сейчас посмотрел в винде подефолту выставлены переменные окружения HOMEPATH и HOMEDRIVE
Разработка программ для *nix
-
deninok
- Сообщения: 585
- Статус: Программист С++
- ОС: Debian GNU/Linux
Re: Получение user home dir
Ага, то есть можно сделать так:
Верно?
Код: Выделить всё
#if defined(WIN32)
home_dir = getenv( "HOMEPATH" )
#else
home_dir = getenv( "HOME" );
#endifВерно?
-
sim1
- Сообщения: 155
- ОС: GNU,BSD
Re: Получение user home dir
deninok писал(а): ↑09.06.2009 17:16Ага, то есть можно сделать так:
Код: Выделить всё
#if defined(WIN32) home_dir = getenv( "HOMEPATH" ) #else home_dir = getenv( "HOME" ); #endif
Верно?
Верно, но HOMEPATH не всегда задан, сейчас точно не помню в каких случаях она не определяется...
По моему если машина включена в домен, то тогда данная переменная пустая.
Разработка программ для *nix
Спасибо сказали:
-
Женя Подсыпальников
- Сообщения: 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.
Пойдём на рыбалку !