config_stream.is_open() c++总是返回false。

问题描述 投票:0回答:1

我有以下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还是我遗漏了什么。

c++ ifstream
1个回答
1
投票

当你把数据文件放在源代码文件中或项目的根目录下时,就会发生这种令人困惑的事情。

执行环境(即当前目录) 在你看来,通常是错误的 当你运行 编译的二进制文件,而被 在IDE中.

在构建过程中,IDE创建临时文件夹,并将你的二进制文件放置在那里,二进制文件的当前目录通常指向构建文件夹(在那里你没有二进制文件所期望的数据文件)。

你可以指示你的IDE 用其他文件夹作为当前目录 为运行,例如 ...

下面是如何配置Intellij Clion来解决这个问题。enter image description here

同样的事情也会发生在任何其他IDE上,所以这个问题并不针对Intellij IDE。

© www.soinside.com 2019 - 2024. All rights reserved.