Вопрос

У меня проблемы с инструкцией 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(). Отказ Или это то, что вы только что пропустили эту строку в фрагменте кода здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top