fix:修正当前目录不正确的问题。
This commit is contained in:
parent
af258785dc
commit
19e8a2da6a
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@ build
|
||||
.cache
|
||||
.vs
|
||||
vs*
|
||||
*.exe
|
8
main.cpp
8
main.cpp
@ -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
|
||||
|
||||
|
38
src/pub.cpp
38
src/pub.cpp
@ -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;
|
||||
@ -82,3 +91,32 @@ std::string CUtil::get_keybindings_file()
|
||||
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
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user