我应该如何获取要与 windows .exe 一起发布的配置文件的绝对路径?
How should I get the absolute path of a configuration file to be published alongside a windows .exe?
我正在用 C++ 开发一个 windows 应用程序。有一个 API 需要配置文件,以及该配置文件的绝对路径。 (https://github.com/ValveSoftware/openvr/wiki/Action-manifest)。如果我了解发布可执行文件的预期做法,我会更容易对此进行推理。
我是否应该将 MyApp.exe 打包到名为 MyApp 的文件夹中,将 MyApp.exe 放在根目录下,并将所有 resources/config 放在旁边?这是否意味着,当 运行 时,从可执行文件中引用的所有相对路径都应该相对于 MyApp 文件夹? 如何获取所有相对路径相对的文件夹的绝对路径?(通过简单地将绝对路径与相对路径连接起来,我可以获得配置文件的完整绝对路径配置文件的路径,我应该控制...)
编辑:澄清一下,API 要求文件路径是绝对路径。见link:"The full path to the file must be provided; relative paths are not accepted."
我不是在寻找让我 不需要 绝对文件路径的 C++ 解决方法:我需要找到一种方法来获取绝对文件路径,因为它是 API.
Windows.
上的操作方法如下
#include <Windows.h>
#include <iostream>
int main(){
/*If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).*/
HMODULE selfmodule = GetModuleHandleA(0);
char absolutepath[MAX_PATH] = {0};
uint32_t length = GetModuleFileNameA(selfmodule,absolutepath,sizoef(absolutepath));
//lets assume our directory is C:/Users/Self/Documents/MyApp/MyApp.exe
//let's backtrack to the /
char* path = absolutepath+length;
while(*path != '/'){
*path = 0;
--path;
}
//Now we are at C:/Users/Self/Documents/MyApp/
//From here we can concat the Resources directory
strcat(absolutepath,"Resources/somefile.txt");
std::cout << absolutepath;
//C:/Users/Self/Documents/MyApp/Resources/somefile.txt
return 0;
}
我正在用 C++ 开发一个 windows 应用程序。有一个 API 需要配置文件,以及该配置文件的绝对路径。 (https://github.com/ValveSoftware/openvr/wiki/Action-manifest)。如果我了解发布可执行文件的预期做法,我会更容易对此进行推理。
我是否应该将 MyApp.exe 打包到名为 MyApp 的文件夹中,将 MyApp.exe 放在根目录下,并将所有 resources/config 放在旁边?这是否意味着,当 运行 时,从可执行文件中引用的所有相对路径都应该相对于 MyApp 文件夹? 如何获取所有相对路径相对的文件夹的绝对路径?(通过简单地将绝对路径与相对路径连接起来,我可以获得配置文件的完整绝对路径配置文件的路径,我应该控制...)
编辑:澄清一下,API 要求文件路径是绝对路径。见link:"The full path to the file must be provided; relative paths are not accepted." 我不是在寻找让我 不需要 绝对文件路径的 C++ 解决方法:我需要找到一种方法来获取绝对文件路径,因为它是 API.
Windows.
上的操作方法如下#include <Windows.h>
#include <iostream>
int main(){
/*If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).*/
HMODULE selfmodule = GetModuleHandleA(0);
char absolutepath[MAX_PATH] = {0};
uint32_t length = GetModuleFileNameA(selfmodule,absolutepath,sizoef(absolutepath));
//lets assume our directory is C:/Users/Self/Documents/MyApp/MyApp.exe
//let's backtrack to the /
char* path = absolutepath+length;
while(*path != '/'){
*path = 0;
--path;
}
//Now we are at C:/Users/Self/Documents/MyApp/
//From here we can concat the Resources directory
strcat(absolutepath,"Resources/somefile.txt");
std::cout << absolutepath;
//C:/Users/Self/Documents/MyApp/Resources/somefile.txt
return 0;
}