config_stream.is_open() c++ 总是 returns false
config_stream.is_open() c++ always returns false
我有以下 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++ 始终 returns false 即使文件存在。我想弄清楚,这是某种错误还是我遗漏了什么。
当您的数据文件位于源代码文件或项目的根目录中时,就会发生这种令人困惑的事情。
执行上下文(即当前目录)从你的角度来看通常是错误的当你运行编译二进制时在 IDE.
中
在构建过程中 IDE 创建临时文件夹并将您的二进制文件放在那里。
二进制文件的当前目录通常指向构建文件夹(您没有二进制文件所需的数据文件)。
您可以指示 IDE 使用另一个文件夹作为 运行 的当前目录,例如 ../ .
您可以通过以下方式配置 Intellij Clion 来解决此类问题。
同样的事情发生在任何其他 IDE 上,所以这个问题不是 Intellij 特有的 IDE。
我有以下 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++ 始终 returns false 即使文件存在。我想弄清楚,这是某种错误还是我遗漏了什么。
当您的数据文件位于源代码文件或项目的根目录中时,就会发生这种令人困惑的事情。
执行上下文(即当前目录)从你的角度来看通常是错误的当你运行编译二进制时在 IDE.
中在构建过程中 IDE 创建临时文件夹并将您的二进制文件放在那里。 二进制文件的当前目录通常指向构建文件夹(您没有二进制文件所需的数据文件)。
您可以指示 IDE 使用另一个文件夹作为 运行 的当前目录,例如 ../ .
您可以通过以下方式配置 Intellij Clion 来解决此类问题。
同样的事情发生在任何其他 IDE 上,所以这个问题不是 Intellij 特有的 IDE。