getline Возвращая пустую строку
Вопрос
У меня проблемы с инструкцией 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» s, оба mission_file, так и save_file rettion is_open () true.
Решение
Невозможно увидеть из экстрактов кода, которые вы опубликовали, но звучит так, будто вы повторно используете то же самое std::fstream
объект для каждого цикла.
Было бы ясно создать новый локальный объект внутри цикла в точке, в которой вам нужно повторно открыть файл.
Если вы должны повторно использовать то же самое fstream
Объект, чтобы открыть новый файл (или тот же файл другого времени), вы должны позаботиться о том, чтобы очистить флаги ошибок потока перед чтением из нового файла.
Выполнение А. clear
В какой-то момент перед первым чтением из нового файла должен сделать это.
mission_file.clear()
Другие советы
Вы убедитесь, что mission_file
закрывается, потому что я не вижу mission_file.close()
. Отказ Или это то, что вы только что пропустили эту строку в фрагменте кода здесь.