Чтение текстового файла с помощью функции fopen и ifstream

Googling file input я нашел два способа ввода текста из файла-fopen и ifstream. Ниже приведены два фрагмента. У меня есть текстовый файл, состоящий из одной строки с целым числом, которое мне нужно прочитать. Должен ли я использовать fopen или ifstream?

ФРАГМЕНТ 1-FOPEN

FILE * pFile = fopen ("myfile.txt" , "r");
char mystring [100];
if (pFile == NULL) 
{
    perror ("Error opening file");
}
else 
{
    fgets (mystring , 100 , pFile);
    puts (mystring);
    fclose (pFile);
}

ФРАГМЕНТ 2-IFSTREAM

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

2 ответов


Я бы предпочел ifstream, потому что он немного более модульный, чем fopen. Предположим, вы хотите, чтобы код, считывающий из потока, также считывался из строкового потока или из любого другого istream. Вы могли бы написать так:

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

теперь вы можете проверить stream_reader без использования реального файла, или использовать его для чтения от других типов ввода. Это гораздо сложнее с fopen.


поскольку это помечено как C++, я скажу ifstream. Если бы он был помечен как C, я бы пошел с fopen: P