1

我正在开发一款游戏的原型,并且某些游戏规则将在 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();

但是,我的流从未成功打开。在调试期间深入研究 STL 源代码会发现 _getstream()(如 stream.c 中定义的)不断返回 NULL,但我就是不知道为什么会这样。帮助,有人吗?

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

4

3 回答 3

8

您假设工作目录是可执行文件所在的目录。这是一个错误的假设。

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

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

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

于 2008-12-11T00:37:14.167 回答
2

您的开放流的范围是否正确。

“rules.ini”不是一个完整的路径,所以它必须是相对的,所以它是相对的。或者你需要在那里使用完整路径。

于 2008-12-10T23:21:49.267 回答
0

(这里是疯狂的假设)您正在使用视觉工作室。在调试期间,您的程序将在项目目录中搜索“rules.ini”

但是,如果您尝试从“myproject/debug/myexe.exe”执行程序,它应该可以正常运行,因为它将在“/debug”中搜索 rules.ini

就像提到的那样,您应该指定完整路径,因为相对路径往往会导致错误

于 2008-12-11T01:02:28.533 回答