fix(cache): change how the game folder is retrieved, use GetModuleFileNameW instead of std::filesystem::path (#1645)
This commit is contained in:
parent
f13eab76a6
commit
a83bc4f44c
@ -84,9 +84,49 @@ namespace big
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::filesystem::path get_game_folder_path()
|
||||||
|
{
|
||||||
|
std::wstring game_module_path(MAX_PATH, '\0');
|
||||||
|
|
||||||
|
if (GetModuleFileNameW(nullptr, game_module_path.data(), game_module_path.size()))
|
||||||
|
{
|
||||||
|
const auto game_folder = std::filesystem::path(game_module_path).parent_path();
|
||||||
|
|
||||||
|
if (std::filesystem::is_directory(game_folder))
|
||||||
|
{
|
||||||
|
return game_folder;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "game_folder variable is not directory " << reinterpret_cast<const char*>(game_folder.u8string().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Failed getting gta module path. Error code: " << GetLastError();
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
void yim_fipackfile::for_each_fipackfile()
|
void yim_fipackfile::for_each_fipackfile()
|
||||||
{
|
{
|
||||||
for (auto& entry : std::filesystem::recursive_directory_iterator(std::filesystem::current_path()))
|
const auto gta_folder = get_game_folder_path();
|
||||||
|
if (gta_folder.empty())
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "get_game_folder_path() failed, aborting.";
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
LOG(INFO) << "gta_folder: " << reinterpret_cast<const char*>(gta_folder.u8string().c_str());
|
||||||
|
}
|
||||||
|
catch (const std::exception& e)
|
||||||
|
{
|
||||||
|
LOG(WARNING) << "Failed printing gta_folder: " << e.what();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const auto& entry : std::filesystem::recursive_directory_iterator(gta_folder, std::filesystem::directory_options::skip_permission_denied))
|
||||||
{
|
{
|
||||||
if (!entry.is_regular_file())
|
if (!entry.is_regular_file())
|
||||||
{
|
{
|
||||||
@ -94,6 +134,8 @@ namespace big
|
|||||||
}
|
}
|
||||||
|
|
||||||
const auto rel_path = std::filesystem::relative(entry.path());
|
const auto rel_path = std::filesystem::relative(entry.path());
|
||||||
|
if (rel_path.empty())
|
||||||
|
continue;
|
||||||
|
|
||||||
const auto utf8_path = UTF16ToCP(CP_UTF8, entry.path().native());
|
const auto utf8_path = UTF16ToCP(CP_UTF8, entry.path().native());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user