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。