fix:修正当前目录不正确的问题。

This commit is contained in:
taynpg 2024-05-28 16:05:05 +08:00
parent af258785dc
commit 19e8a2da6a
4 changed files with 46 additions and 6 deletions

3
.gitignore vendored
View File

@ -1,4 +1,5 @@
build
.cache
.vs
vs*
vs*
*.exe

View File

@ -381,13 +381,13 @@ int main(int argc, char** argv)
#if _DEBUG
std::cout << "Debug Mode." << std::endl;
fs::path exe_path(argv[0]);
gParam.exe_dir = fs::current_path().parent_path().string();
fs::path exe_path(CUtil::get_exe_path());
gParam.exe_dir = exe_path.parent_path().parent_path().string();
std::cout << std::format("current_path is: {}", gParam.exe_dir) << "\n";
#else
std::cout << "Release Mode." << std::endl;
fs::path exe_path(argv[0]);
gParam.exe_dir = fs::current_path().string();
fs::path exe_path(CUtil::get_exe_path());
gParam.exe_dir = exe_path.parent_path().string();
std::cout << std::format("current_path is: {}", gParam.exe_dir) << "\n";
#endif

View File

@ -1,6 +1,15 @@
#include "pub.h"
#include <filesystem>
#ifdef _WIN32
#include <windows.h>
#elif defined(__clang__) && defined(__APPLE__)
#include <unistd.h>
#include <mach-o/dyld.h>
#else
#include <unistd.h>
#endif
namespace fs = std::filesystem;
CUtil::CUtil() = default;
@ -81,4 +90,33 @@ std::string CUtil::get_keybindings_file()
#endif
path = ret.append("keybindings.json").string();
return path;
}
}
std::string CUtil::get_exe_path()
{
std::string path;
#ifdef _WIN32
char buffer[MAX_PATH];
DWORD length = GetModuleFileName(NULL, buffer, MAX_PATH);
if (length == 0) {
return "";
}
return std::string(buffer, length);
#elif defined(__clang__) && defined(__APPLE__)
uint32_t size = 0;
_NSGetExecutablePath(NULL, &size); // 获取路径缓冲区的大小
std::vector<char> buffer(size); // 创建缓冲区
if (_NSGetExecutablePath(buffer.data(), &size) != 0) {
return "";
}
return std::string(buffer.data());
#else
char buffer[PATH_MAX];
ssize_t len = readlink("/proc/self/exe", buffer, sizeof(buffer) - 1);
if (len == -1) {
return "";
}
buffer[len] = '\0'; // 确保字符串以null终止
return std::string(buffer);
#endif
}

View File

@ -16,6 +16,7 @@ public:
static std::string replace(const std::string& content, const std::string& from, const std::string& to);
static std::string get_home();
static std::string get_keybindings_file();
static std::string get_exe_path();
};