0

我正在用 C++ 制作一个 Windows 应用程序。有一个需要配置文件的 API,以及该配置文件的绝对路径。(https://github.com/ValveSoftware/openvr/wiki/Action-manifest)。如果我了解发布可执行文件的预期做法,我会更容易对此进行推理。

我是否应该将 MyApp.exe 打包到一个名为 MyApp 的文件夹中,MyApp.exe 位于根目录,所有资源/配置都在它旁边?这是否意味着在运行时,从可执行文件中引用的所有相对路径都应该相对于 MyApp 文件夹?如何获取所有相对路径都相对的文件夹的绝对路径?(通过简单地将绝对路径与配置文件的相对路径连接起来,我可以得到配置文件的完整绝对路径,我应该控制它......)

编辑:澄清一下,API要求文件路径是绝对的。请参阅链接:“必须提供文件的完整路径;不接受相对路径。” 我不是在寻找让我不需要绝对文件路径的 c++ 解决方法:我需要找到一种方法来获取绝对文件路径,因为它是 API 的约束。

4

1 回答 1

2

这是在 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;
}
于 2020-06-03T18:31:34.560 回答