我如何确保 fopen() 打开一个相对于可执行文件的文件而不是我在 C++ 中的当前目录?

How do I make sure fopen() opens a file relative to the executable rather than my current directory in C++?

我有一个在 Windows 7 上使用 MinGW 编译的 C++ 程序调用 fopen(),指定一个具有相对路径的文件。如果你 运行 可执行文件在它自己的目录中,程序工作正常,但我注意到如果我 运行 程序在不同的命令行中, fopen() 将找不到指定的文件目录。例如,如果我的可执行文件 "foo.exe" 和指定文件 "bar.txt" 位于 "C:\project\build\" 并且我 运行 exe 在 "C:\project\" 中,fopen() 将找不到文件。使用代码或编译器标志是否有一些解决方法?

我可以看到这是访问相对于可执行文件指定位置的资源所必需的,尽管不知道可执行文件本身的绝对路径。我建议获取可执行文件的绝对路径,可能使用 Get path of executable 中描述的方法之一,然后将进程的工作目录更改为可执行文件的父目录,或者构建文件的绝对路径你想通过解析你对该目录的相对路径来打开。然后你可以将结果传递给 fopen().