Чтение текстового файла с помощью функции 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