Не выводит правильно путь до файла
Подскажите как правильно сделать функцию возвращения полного пути до файла?
Попробовал так:
#include <iostream>
#include <windows.h>
std::wstring GetFilePath();
int main() {
printf("Filepath: %ws\n", GetFilePath());
system("pause");
return 0;
}
std::wstring GetFilePath()
{
WCHAR buffer[MAX_PATH + 1];
GetModuleFileName(NULL, buffer, sizeof(buffer) / sizeof(buffer[0]));
return buffer;
}
Но он мне выводит не путь а цифры типа: 019809
Ответы (2 шт):
Автор решения: S.H.
→ Ссылка
Копирую фрагмент кода из ссылки, котрую привел в комментарии. Как я понял, всё дело - в волшебных пузырьках, то есть анализе кода ошибок и правильном использовании возвращаемых значений. Ответ получается в последней строчке этого кода
DWORD result = GetModuleFileNameA(nullptr, &buf[0], size);
DWORD lastError = GetLastError();
if (result == 0)
{
shouldContinue = false;
}
else if (result < size)
{
havePath = true;
shouldContinue = false;
}
else if (
result == size
&& (lastError == ERROR_INSUFFICIENT_BUFFER || lastError == ERROR_SUCCESS)
)
{
size *= 2;
buf.resize(size);
}
else
{
shouldContinue = false;
}
} while (shouldContinue);
if (!havePath)
{
return detail::executable_path_fallback(argv0);
}
// On Microsoft Windows, there is no need to call boost::filesystem::canonical or
// boost::filesystem::path::make_preferred. The path returned by GetModuleFileNameA
// is the one we want.
std::string ret = &buf[0];
Автор решения: Harry
→ Ссылка
Чтобы выводить с помощью printf, надо передавать не wstring, а wchar_t*, т.е. добавить .c_str() - и все заработает...
printf("Filepath: %ws\n", GetFilePath().c_str());
Откуда же функции из C знать о типах С++? Лучше, кстати, использовать "родной" вывод:
std::wcout << L"Filepath: " << GetFilePath() << std::endl;