正在检查是否使用ifstream成功打开了文件

Checking if a file opened successfully with ifstream

本文关键字:成功 文件 ifstream 检查 是否      更新时间:2023-10-16

我有以下内容将打开一个文件进行读取。但是,我想检查以确保文件已成功打开,所以我使用fail来查看是否已设置标志。然而,我不断得到以下错误:

我是C++的新手,因为我来自C。所以我不确定我是否理解这个错误:

无法调用成员函数'bool std::basic_ios&lt_图表_特征>::fail()const[with_CharT=char,_Traits=std::char_Traits]'不带对象

代码:

int devices::open_file(std::string _file_name)
{
    ifstream input_stream;
    input_stream.open(_file_name.c_str(), ios::in);
    if(ios::fail() == true) {
        return -1;
    }
    file_name = _file_name;
    return 0;
}

您可以简单地执行以下操作:

int devices::open_file(std::string _file_name)
{
    ifstream input_stream;    
    input_stream.open(_file_name.c_str(), ios::in);
    if(!input_stream)
    {
        return -1;
    } 
    file_name = _file_name;
    return 0;
}

fail()不是一个静态方法,您必须在实例而不是类型上调用它,所以如果您想使用fail(,请在上面的代码中将!input_stream替换为input_stream.fail()

我真的很想知道你在这里想要实现什么。您正在打开文件,然后立即再次关闭它。你只是想检查文件是否存在吗?

您也可以使用std::ifstream::is_open。如果文件已打开并与此流对象关联,则返回true。

// ifstream::is_open
#include <iostream>     // std::cout
#include <fstream>      // std::ifstream
int main () {
  std::ifstream ifs ("test.txt");
  if (ifs.is_open()) {
    // print file:
    char c = ifs.get();
    while (ifs.good()) {
      std::cout << c;
      c = ifs.get();
    }
  }
  else {
    // show message:
    std::cout << "Error opening file";
  }
  return 0;
}

http://www.cplusplus.com/reference/fstream/ifstream/is_open/

您的错误是因为您使用ios::fail()作为静态方法,而它实际上是一个成员方法。

if (input_stream.fail())
{
    ...
}

您必须对流对象调用fail()。更惯用的方法是:

input_stream.open(_file_name.c_str(), ios::in);
if( ! input_stream ) {
    return -1;
}