Подтвердить что ты не робот

Чтение текстового файла - fopen vs. ifstream

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

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

SNIPPET 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"; 
}
4b9b3361

Ответ 1

Я бы предпочел 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.

Ответ 2

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