的std :: ifstream的::打开()不工作
我开发一个游戏原型,以及某些游戏规则是ini文件中定义,这样的游戏设计师可以调整游戏参数,而不从我需要帮助除了重新编译。这是我目前正在做的:的std :: ifstream的::打开()不工作
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文件。
您假定工作目录是您的可执行文件所在的目录。这是一个糟糕的假设。
您的可执行文件可以从任何工作目录下运行,所以它通常是一个坏主意,在软件中硬编码相对路径。
如果你想能够访问相关文件到您的可执行文件的位置,你应该首先确定你的可执行文件的路径,并创建一个完全合格的路径。
您可以通过检查argv[0]
参数传递给main()
让你的可执行文件的名称。或者,如果您在Windows上,则可以通过将NULL作为第一个参数传递给GetModuleFileName()
。
您打开的流的范围是否正确。
“rules.ini”不是一个完整的路径,它是相对的是什么呢相对。或者你需要在那里使用完整的路径。
对不起,忘了提及,该文件与我的.exe文件位于同一目录中。这应该与默认设置,我认为? – Aistina 2008-12-10 23:46:35
Aistina,no。它取决于当前的工作目录。如果您的应用程序使用../a.out执行,例如,它会失败 – 2008-12-11 00:41:31
(野生假设在这里)你正在使用visual studio。在调试过程中,您的程序将搜索项目目录中的“rules.ini”
但是,如果您尝试从“myproject/debug/myexe.exe”执行程序,它应该正常运行,因为它要运行搜索“/调试”为rules.ini
像它被mentionned因为相对路径往往会导致错误您应该指定完整路径
是rules.ini或rules.ini文件的名称? – Whaledawg 2008-12-10 23:34:42