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

use*_*112 0 c++ fopen

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

Dav*_*d Z 5

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