Ответ в том, что вы вообще не используете переменные окружения.Скорее, вы используете функции оболочки, специально предназначенные для получения пути к специальным папкам.
В Windows Vista и более поздних версиях эта функция равна SHGetKnownFolderPath
.Требуется KNOWNFOLDERID
значений , чтобы определить папку, путь которой вы хотите получить.В вашем случае это будет FOLDERID_Profile
.
. Если вам нужно настроить таргетинг на более ранние версии Windows (например, XP), вам нужно будет использовать SHGetSpecialFolderPath
функцию вместо,Он принимает значение CSIDL , определяющее папку, путь которой вы хотите получить.Опять же, в вашем случае это будет CSIDL_PROFILE
.
Конечно, вы никогда не должны хранить данные непосредственно в папке профиля пользователя .Надеюсь, фрагмент кода, который вы показали, предназначен только для демонстрационных целей.Приложения должны создавать файлы только в определенных местах в папке профиля пользователя, предназначенной для хранения данных приложений.
Эти местоположения CSIDL_APPDATA
или CSIDL_LOCAL_APPDATA
.Если вы создаете данные, которые пользователь должен иметь возможность изменять и обрабатывать как свои собственные, то было бы целесообразно сохранить эти данные в папке документов пользователя (CSIDL_MYDOCUMENTS
).
Больше использованияинформация доступна в мой ответ здесь .
Пример кода:
TCHAR szFolderPath[MAX_PATH];
if (!SHGetSpecialFolderPath(NULL, szFolderPath, CSIDL_APPDATA, FALSE))
{
// Uh-oh! An error occurred; handle it.
}
Или, используя класс MFC CString
:
CString buffer;
BOOL bRet = SHGetSpecialFolderPath(NULL, buffer.GetBuffer(MAX_PATH), CSIDL_APPDATA, FALSE);
buffer.ReleaseBuffer();
if (!bRet)
{
// Uh-oh! An error occurred; handle it.
}