Как открыть папку в% appdata% с помощью С++?

Как вы все знаете, папка appdata - это

 C:\Users\*Username*\AppData\Roaming

на окнах 7

Поскольку мое приложение будет развернуто на всех видах ОС Windows, мне нужно будет получить папку на 100% процентов времени. Вопрос в том, как вы это делаете на С++? Поскольку я не знаю точной ОС Windows, это может быть XP, Vista или 7 и, самое главное, я не знаю, что такое Username.

Ответ 1

Для максимальной совместимости со всеми версиями Windows вы можете использовать функцию SHGetFolderPath.
Для этого требуется указать значение CSIDL для папки, путь которой вы хотите получить. Для папки данных приложения это будет CSIDL_APPDATA.

В Windows Vista и более поздних версиях вместо этого вы должны использовать функцию SHGetKnownFolderPath, для которой требуется указать папку KNOWNFOLDERID. Опять же, для папки данных приложения соответствующее значение FOLDERID_RoamingAppData.

Чтобы использовать любую из этих функций из вашего приложения на С++, вам нужно включить shlobj.h.

Ответ 2

Вы можете попробовать следующее:

char* appdata = getenv("APPDATA");

Этот код считывает переменную окружения APPDATA (вы также можете увидеть ее при вводе SET в окне команд). Он устанавливается Windows при запуске вашей системы.

Он вернет путь пользователя appdata как абсолютный путь, включая имя пользователя и с учетом той версии ОС, которую они используют.

Ответ 3

Используйте этот код для чтения переменной среды "APPDATA"
Включить файл stdio.h в начало

char *pValue;
size_t len;
errno_t err = _dupenv_s(&pValue, &len, "APPDATA");