Чтение текстового файла - fopen vs. ifstream - PullRequest
22 голосов
/ 19 июня 2011

Ввод файла в 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"; 
}

Ответы [ 2 ]

29 голосов
/ 19 июня 2011

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

17 голосов
/ 19 июня 2011

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

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 это намного сложнее.

...