Есть ли способ получить домашний путь пользователя в виде строки в Windows? - PullRequest
0 голосов
/ 23 апреля 2019

Я динамически читаю в XML-файлах с жесткого диска.В OSX я могу использовать функцию getenv ("HOME"), чтобы получить домашний каталог.Однако это не работает на Windows для меня.при использовании функции getenv () в Windows вместо имени пользователя я просто получаю точку.Есть ли функция, которая дает мне корневой каталог в виде строки, которая работает в Windows и OSX?

string  HOME = getenv("HOME") ? getenv("HOME") : ".";
string homePath;
string s1 = HOME;
string s2 = "/Documents/Resolume Arena 6/Preferences/AdvancedOutput.xml";
homePath = s1 + s2;

    cout << "preferences path: " << homePath << endl;

это дает мне:

"путь настроек: ./Documents/Resolume Arena 6 / Preferences / AdvancedOutput.xml"

1 Ответ

0 голосов
/ 23 апреля 2019

В Windows вы должны хранить настройки приложения в папке внутри %AppData%.

#ifdef _WIN32
#include <windows.h>
#include <Shlobj.h>
#include <Shlwapi.h>
#endif

...

string homePath;
#ifdef _WIN32
CHAR buf[MAX_PATH+100];
if (!SHGetSpecialFolderPathA(0, buf, CSIDL_APPDATA, TRUE))
{
  // Handle error
}
PathAppendA(buf, "MyCompany\\MyApplication);
homePath = buf
#else
homePath = ...; // OSX code
#endif
cout << "preferences path: " << homePath << endl;

В Windows вам не следует использовать CHAR, string и A суффиксные функции, в идеале вы должны использовать Unicode (UTF-16LE), что означает WCHAR, wstring и W функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...