我有以下c++代码。
int main(int argc, char *argv[]) {
std::string filename("config.txt");
if (argc == 2)
filename = argv[1];
if (argc > 2) {
std::cerr << "Too many arguments. Usage: \n"
"<program>\n"
"or\n"
"<program> <config-filename>\n" << std::endl;
return 1;
}
std::ifstream config_stream(filename);
if (!config_stream.is_open()) {
std::cerr << "Failed to open configuration file " << filename << std::endl;
return 2;
}
return 0;
}
这个简单的程序是以命令行参数的形式获取配置文件 如果没有提供这个参数,它就会在当前目录下搜索默认名称的配置文件。在以前的项目中工作得很好,但现在config_stream.is_open()c++总是返回false,即使文件存在。我想弄清楚,这是某种bug还是我遗漏了什么。
解决方案:
当你把数据文件放在源代码文件中或项目的根目录下时,就会发生这种令人困惑的事情。
执行环境(即当前目录) 在你看来,通常是错误的 当你运行 编译的二进制文件,而被 在IDE中.
在构建过程中,IDE创建临时文件夹,并将你的二进制文件放置在那里,二进制文件的当前目录通常指向构建文件夹(在那里你没有二进制文件所期望的数据文件)。
你可以指示你的IDE 用其他文件夹作为当前目录 为运行,例如 ...
同样的事情也会发生在任何其他IDE上,所以这个问题并不针对Intellij IDE。