Reading a text file - fopen vs. ifstream

Since this is tagged as C++, I will say ifstream. If it was tagged as C, i'd go with fopen :P


I would prefer ifstream because it is a bit more modular than fopen. Suppose you want the code that reads from the stream to also read from a string stream, or from any other istream. You could write it like this:

void file_reader()
{ 
    string line;
    ifstream myfile ("example.txt");
    if (myfile.is_open())
    {
        while (myfile.good())
        {
          stream_reader(myfile);
        }
        myfile.close();
    }
    else 
    {  
        cout << "Unable to open file"; 
    }
}

void stream_reader(istream& stream)
{
    getline (stream,line);
    cout << line << endl;
}

Now you can test stream_reader without using a real file, or use it to read from other input types. This is much more difficult with fopen.