Как открыть папку в% appdata% с C ++? - PullRequest
15 голосов
/ 07 мая 2011

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

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

на окнах 7

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

Ответы [ 3 ]

21 голосов
/ 07 мая 2011

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

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

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

17 голосов
/ 30 марта 2012

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

char* appdata = getenv("APPDATA");

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

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

1 голос
/ 10 апреля 2019

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

char *pValue;
size_t len;
errno_t err = _dupenv_s(&pValue, &len, "APPDATA");
enter image description here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...