Как я могу найти домашний dir пользователя кросс-платформенным способом, с помощью C++?

Как я могу найти корневой каталог пользователя кросс-платформенным способом в C++? т.е./home/user в Linux, C:\Users\user\ на Windows Vista, C:\Documents And Settings\user\ на Windows XP, и независимо от того, что это - то использование Mac. (Я думаю, что это-/User/user),

В основном то, что я ищу, является C++ способ сделать это (пример в Python)

os.path.expanduser("~")
28
задан RAM 19 July 2018 в 03:13
поделиться

2 ответа

Я не думаю, что с помощью этого можно полностью скрыть разделение Windows / Unix (если, может быть, в Boost что-то есть).

Наиболее переносимым способом будет getenv ("HOME") в Unix и объединение результатов getenv ("HOMEDRIVE") и getenv ("HOMEPATH ") в Windows.

const static volatile char A = 'a'; // All this is to prevent reverse engineering
#ifdef unix
    HomeDirectory = getenv((char[]){A-25, A-18, A-20, A-28, 0});
#elif defined(_WIN32)
    HomeDirectory = getenv((char[]){A-25, A-18, A-20, A-28, A-29, A-15, A-24, A-11, A-28, 0});
    const char*Homepath = getenv((char[]){A-25, A-18, A-20, A-28, A-17, A-32, A-13, A-25, 0});
    HomeDirectory = malloc(strlen(HomeDirectory)+strlen(Homepath)+1);
    strcat(HomeDirectory, Homepath);
#endif
27
ответ дан 28 November 2019 в 03:20
поделиться

Домашний каталог на самом деле не является кроссплатформенной концепцией. Ваше предложение корня каталога профиля (%USERPROFILE%)Это справедливая аналогия, но в зависимости от того, что вы хотите сделать после получения каталога, вам может потребоваться один из каталогов данных приложения или мои документы пользователя. В UNIX вы можете создать скрытый ".myapp" в домашнем каталоге, чтобы сохранить свои файлы, но это не так в Windows.

Лучше всего написать конкретный код для каждой платформы, чтобы попасть в каталог, который вы хотите в каждом случае. В зависимости от того, насколько правильным вы хотите быть, может быть достаточно использовать env vars: HOME на UNIX, USERPROFILE или APPDATA (в зависимости от того, что вам нужно) на Windows.

По крайней мере, в UNIX (кто-нибудь из пользователей Windows хочет прокомментировать?), обычно рекомендуется использовать переменную среды HOME, если она установлена, даже если она не согласуется с каталогом, указанным в файле паролей. Затем, в странном случае, когда пользователи хотят, чтобы все приложения считывали их данные из другого каталога, это все равно будет работать.

2
ответ дан 28 November 2019 в 03:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: