У меня проблемы с инструкцией getline от fstream. это фрагмент моего кода:
boolean_1=true;
while(true)
{
if(boolean_1)
{
//some stuff
}
else
{
save_file.open("save.txt", fstream::in);
//some stuff
save_file.close();
}
mission_file.open(filename, fstream::in);
mission_file.getline(buffer_line, 256);
//some other stuff
boolean_1=false;
save_file.open("save.txt", fstream::out);
//write something
save_file.close();
}
Этот код должен открывать файл mission_file при первом запуске и открывать файл сохранения на следующей итерации. Файл сохранения создается в конце каждого цикла. По крайней мере, так должно работать. Потому что в первый раз все работает без нареканий, но на следующей итерации "mission_file.getline (buffer_line, 256);" возвращает пустую строку, вызывая сбой программы. Кроме того, если boolean_1 начинается с false, цикл работает до следующего.
Я уже проверил наличие требуемых «.txt», оба параметра mission_file и save_file возвращают is_open () true.
Невозможно увидеть из фрагментов кода, которые вы опубликовали, но похоже, что вы повторно используете один и тот же объект std :: fstream
для каждого цикла.
Было бы проще создать новый локальный объект внутри цикла в точке, в которой вам нужно повторно открыть файл.
Если вам необходимо повторно использовать тот же объект fstream
, чтобы открыть новый файл (или тот же файл в другой раз), вы должны обязательно очистить все флаги ошибок потока перед чтением из нового файла.
Выполнение очистки
в какой-то момент перед первым чтением из нового файла должно сделать это.
mission_file.clear()
Вы убедитесь, что mission_file
закрывается, потому что я не вижу mission_file.close ()
. Или вы просто пропустили эту строку во фрагменте кода здесь.