即使该位置不存在文件,ifstream :: is_open也将返回true

时间:2019-04-02 14:00:18

标签: c++

我有一个功能,基本上可以从该位置打开文件,并将文件中可用的值解析为源代码的其他位置所使用的某种结构。 这里的问题是即使文件在上述位置不可用,ifstream :: isopen也将返回true

我没有使用构造函数,而是尝试使用ifstream :: open显式打开文件,但不幸的是,它没有用。

bool ClassName::loadRecordingConfiguration() 
{
     std::string filepathConfig = getDataFolder() + std::string("\\file.json");
     std::ifstream jsonFile(filepathConfig.c_str());
     if (jsonFile.is_open()) {
         //This part is executed when getDataFolder failed to return the folder path and file.json is not available
         //This part is also executed when getDataFolder returns correct folder path and file.json is available
     }
}

//Returns the folder path if SomeCondition is satisfied
std::string ClassName::getDataFolder() 
{
    if (SomeCondition) {
        return std::string(SomeFilePath);
    }
    return std::string("");
}

由于文件夹路径不正确,我希望仅当我将somFilePath位置中放置了file.json时,它才能工作

1 个答案:

答案 0 :(得分:0)

尝试使用operator boolif (jsonFile){ ... })或检查流标志(无效位,故障位)。打开文件是特定于操作系统的操作,ifstream::is_open()仅检查它是否成功创建了文件句柄。

在任何情况下,最好先检查它是否与某些OS API一起出现(例如,对于Windows,PathFileExistsA)。