Как правильно использовать SHGetKnownFolderPath
Я пытаюсь найти файл
#include <iostream>
#include <Windows.h>
#include <ShlObj.h>
#include <sstream>
bool func()
{
wchar_t* path = 0;
std::stringstream ss;
ss << path << "/asdsdadad/ad/ad/asd/ad/a/d";
if (SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path) == S_OK)
{
std::cout << "GOOD";
return true;
}
else
{
std::cout << "BAD";
return false;
}
}
int main()
{
func();
}
Но что бы я не вводил в path он возвращает true. Хотелось бы знать где я совершил ошибку?
Ответы (1 шт):
Автор решения: Dmitry Safonov
→ Ссылка
Ошибка в том, что функция SHGetKnownFolderPath определяет путь к одной из системных папок, о которых знает windows, в данном случае, раз ты передаёшь FOLDERID_LocalAppData константу, то в path запишется полный путь к папке AppData локального пользователя. Эта функция, если выполнилась успешно ВСЕГДА возвратит S_OK. Если же ты хочешь сравнить свой путь, из stringstream с системным путём, то сравнивай строки как-то так:
#include <iostream>
#include <Windows.h>
#include <ShlObj.h>
#include <sstream>
bool func()
{
wchar_t* path = 0;
std::wstringstream ss;
ss << "C:\\Users\\dmitry\\AppData\\Local";
std::wstring wstr = ss.str();
if (SHGetKnownFolderPath(FOLDERID_LocalAppData, 0, NULL, &path) == S_OK) {
std::wstring path_wstr(path);
if (wstr.compare(path_wstr) == 0) {
std::cout << "GOOD\n";
return true;
}
else {
std::cout << "BAD\n";
return true;
}
}
}
int main()
{
func();
system("pause");
}