std :: ifstream :: open()不起作用

Ais*_*ina 1 c++ iostream stl

我正在为游戏开发原型,并且某些游戏规则将在ini文件中定义,以便游戏设计师可以在不需要重新编译的帮助的情况下调整游戏参数.这就是我目前正在做的事情:

std::ifstream stream;
stream.open("rules.ini");

if (!stream.is_open())
{
    throw new std::exception("Rule file could not be opened");
}

// read file contents here

stream.close();
Run Code Online (Sandbox Code Playgroud)

但是,我的流不会成功打开.在调试期间深入了解STL源会发现_getstream()(在stream.c中定义)继续返回NULL,但我无法弄清楚为什么会这样.帮忙,有人吗?

编辑:Rules.ini与.exe文件位于同一目录中.

Dre*_*ann 7

您假设工作目录是您的可执行文件所在的目录.这是一个不好的假设.

您的可执行文件可以从任何工作目录运行,因此在软件中对相对路径进行硬编码通常是个坏主意.

如果您希望能够访问相对于可执行文件位置的文件,则应首先确定可执行文件的路径并从中创建完全限定的路径.

您可以通过检查argv[0]传递给的参数来获取可执行文件的名称main().或者,如果您使用的是Windows,则可以GetModuleFileName()通过传递NULL作为第一个参数来获取它.