ant2009 ant2009 - 4 years ago 149
C++ Question

Checking if a file opened successfully with ifstream

I have the following that will open a file for reading. However, I want to check to make sure that the file was open successfully, so I am using the fail to see if the flags have been set. However, I keep getting the following error:

I am new to C++, as I am coming from C. So not sure I understand this error:


cannot call member function ‘bool std::basic_ios<_CharT,
_Traits>::fail() const [with _CharT = char, _Traits = std::char_traits]’ without object


Code:

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;
}

Answer Source

You can simply do this:

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() is not a static method, you must call it on an instance not a type, so if you want to use fail(), replace !input_stream with input_stream.fail() in my code above.

I do have to wonder what you're trying to achieve here. You're opening the file and immediately close it again. Are you simply trying to check if the file exists?

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download