2008-12-10 57 views
1

我开发一个游戏原型,以及某些游戏规则是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文件。

+0

是rules.ini或rules.ini文件的名称? – Whaledawg 2008-12-10 23:34:42

回答

7

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

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

如果你想能够访问相关文件到您的可执行文件的位置,你应该首先确定你的可执行文件的路径,并创建一个完全合格的路径。

您可以通过检查argv[0]参数传递给main()让你的可执行文件的名称。或者,如果您在Windows上,则可以通过将NULL作为第一个参数传递给GetModuleFileName()

2

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

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

+0

对不起,忘了提及,该文件与我的.exe文件位于同一目录中。这应该与默认设置,我认为? – Aistina 2008-12-10 23:46:35

+0

Aistina,no。它取决于当前的工作目录。如果您的应用程序使用../a.out执行,例如,它会失败 – 2008-12-11 00:41:31

0

(野生假设在这里)你正在使用visual studio。在调试过程中,您的程序将搜索项目目录中的“rules.ini”

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

像它被mentionned因为相对路径往往会导致错误您应该指定完整路径