Я хорошо использовал этот код, чтобы получить путь к папке данных приложения для моего приложения C ++.
char* actFilePath = NULL;
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_LOCAL_APPDATA, NULL, 0, szPath)))
{
PathAppend(szPath, _T("\\MyFile.txt"));
actFilePath = wchar_to_string(szPath);
}
Когда я запускаю этот код на некоторых неанглийских ОС Windows 8 или Windows 10, этот код завершается ошибкой (actFilePath просто нулевой).Я обнаружил, что код не работает из-за не английского имени пользователя в пути к папке, например, débarquer Matyáš или 姓 名, как вы можете видеть из пути ниже:
C:\Users\débarquer Matyáš\AppData\Local
C:\Users\姓 名\AppData\Local
Что является более надежным и менее подверженным ошибкамна всякий случай, если какое-то имя пользователя написано на их родном языке, включая китайский, японский или европейский, и т. д. Пример рабочего кода будет очень полезен.
С уважением.
==========================================================================
Обновлено до ответа от VTT 12 ноября 2018
Я создал этокод после ответа от VTT.Этот код компилируется нормально.Однако возвращенный путь к папке ведет себя неожиданно.Иногда он дает мне правильный путь, но иногда он возвращает нечитаемый путь к файлу.Что-то вроде этого.Смотрите прикрепленную ссылку для некоторых странных персонажей.У меня сложилось впечатление, что этот код нестабилен.
https://ibb.co/goLzxq
wchar_t* actFilePath = NULL;
if (SUCCEEDED(SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &actFilePath)))
{
PathAppendW(actFilePath, L"\\MyFile.txt");
}
Я также следовал некоторым советам из этого ответа здесь.
Как преобразовать PWSTR в строку в C ++?