#pragma once #include "mcp_utils.h" #include #include #include namespace mcp_utils { std::wstring utf8ToWString(const std::string &utf8Str) { if (utf8Str.empty()) return std::wstring(); // 第一次调用获取需要的宽字符缓冲区大小 int sizeNeeded = ::MultiByteToWideChar(CP_UTF8, 0, &utf8Str[0], (int)utf8Str.size(), NULL, 0); std::wstring wstrTo(sizeNeeded, 0); // 第二次调用真正进行转换 ::MultiByteToWideChar(CP_UTF8, 0, &utf8Str[0], (int)utf8Str.size(), &wstrTo[0], sizeNeeded); return wstrTo; } bool mcp_utils::hasFileExist(const std::wstring &filePath) { return _taccess(filePath.c_str(), 0) == 0; } bool mcp_utils::hasDirExist(const std::wstring &filePath) { return _taccess(filePath.c_str(), 0) == 0; } std::wstring getModelDir() { TCHAR szPath[MAX_PATH]; ::GetModuleFileName(_hdllInstance, szPath, MAX_PATH); ghc::filesystem::path path(szPath); return path.parent_path().wstring(); } fs::path getModelDirPath() { return fs::path(getModelDir()); } fs::path relative2absolute(const std::string &relativePath, const fs::path &rootPath) { return relative2absolute(fs::path(utf8ToWString(relativePath)), rootPath); } fs::path relative2absolute(const fs::path &relativePath, const fs::path &rootPath) { fs::path absolutePath = rootPath / relativePath; return absolutePath.lexically_normal().wstring(); } }