Я довольно новичок в программировании на С ++, и у меня возникают проблемы с чтением из уже открытого файла. То, что я делаю, это писать в файл, читая его, добавляя к нему конец, а затем пытаюсь прочитать его снова, не закрывая исходный ifstream. Код выглядит следующим образом:Невозможно прочитать новую строку файла
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
ofstream myFile ("example.dat");
// Open and write to file
if (myFile.is_open())
{
myFile << "This is a line." << endl;
myFile << "This is another line." << endl;
myFile.close();
}
else cout << "no";
// Open and read from file
string line;
ifstream myFilein ("example.dat");
if (myFilein.is_open())
{
while (getline(myFilein,line))
{
cout << line << myFilein.tellg() << endl;
}
//myFilein.close();
}
// Open and add to end of file
if (!myFile.is_open())
{
myFile.open("example.dat", ios::app);
myFile << "This is the last line." << endl;
myFile.close();
}
//myFilein.open("example.dat", ios::ate);
// Read from already open file
myFilein.seekg(0, ios::beg);
if (myFilein.is_open())
{
cout << "myFilein is open. " << myFilein.tellg() << endl;
while (!myFilein.eof())
{
getline(myFilein, line);
cout << line << endl;
}
}
myFilein.close();
int holdClose;
cin >> holdClose;
return 0;
}
Очевидно, что-то происходит не так, как tellg() возвращает значение -1 после первого чтения (то есть, после того, как он попадает в конец файла), но я «Не совсем уверен, почему он возвращает -1, так как я пытаюсь сбросить позицию до начала файла. Есть ли что-то, что мне не хватает или непонимание, как это работает? Если я закрою и снова открою файл, тогда все в порядке, но мне любопытно, есть ли способ продолжать читать, не закрывая его, если это имеет смысл. Спасибо за помощь :)
Как только файл имеет флаги ошибок, например 'eof', вам нужно использовать' myFilein.clear() 'для их сброса, если вы хотите продолжить работу с файлом. –
Вот и все! Спасибо, @RetiredNinja! –