Различные версии Windows хранят профили пользователей в разных местах, и даже имя папки по умолчанию Documents
может отличаться.Фактически, имя и местоположение папки Documents
пользователя полностью настраиваются пользователем и могут даже вообще не находиться под профилем пользователя.Поэтому не следует полагать, что папка Documents
всегда находится в C:\\Users\\%USERNAME%\\Documents
.
. Лучший способ получить правильный путь к папке пользователя Documents
во всех версияхWindows просто спросит у самой Windows .Для этого используйте SHGetFolderPath(CSIDL_MYDOCUMENTS)
(до Vista) или SHGetKnownFolderPath(FOLDERID_Documents)
(Vista +), например:
#include <shlobj.h>
#include <shlwapi.h>
std::string GetDocumentsFolder()
{
std::string path;
char szPath[MAX_PATH+1] = {};
if (SHGetFolderPathA(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, szPath) == S_OK)
path = PathAddBackslashA(szPath);
/*
PWSTR pPath = NULL;
if (SHGetKnownFolderPath(FOLDERID_Documents, KF_FLAG_DEFAULT, NULL, &pPath) == S_OK)
{
int wlen = lstrlenW(pPath);
int len = WideCharToMultiByte(CP_ACP, 0, pPath, wlen, NULL, 0, NULL, NULL);
if (len > 0)
{
path.resize(len+1);
WideCharToMultiByte(CP_ACP, 0, pPath, wlen, &path[0], len, NULL, NULL);
path[len] = '\\';
}
CoTaskMemFree(pPath);
}
*/
return path;
}
std::string GetAuthFilePath()
{
std::string path = GetDocumentsFolder();
if (!path.empty())
path += "Cheats\\Authorise.ini";
return path;
}
std::string authFile = GetAuthFilePath();
...