Способ переписать только первые 30 символов, используя std :: ofstream?

0

есть ли способ переписать только первые 30 символов текстового файла, используя std :: ofstream, не очищая все содержимое текстового файла? Я посмотрел в Интернете, но это не помогло. Один парень предложил переписать весь файл, но это очень неэффективно (есть еще +900 * 30 других персонажей). Кто угодно? О, и вот мой код:

void Unlock(int Level)
{
    ifstream CheckIfExists("levels.txt");
    if (!CheckIfExists.good())
    {
        SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, "ERROR",
                                 "Unable to open the levels file. Next level won't be unlocked!", window);
        CheckIfExists.close();
        return;
    }
    CheckIfExists.close();
    if(Level >= 0 && Level <= 29)
    {
        ofstream New_Locks("levels.txt");
        Locked[Level] = UNLOCKED;
        for(int i = 0; i < 30; ++i) New_Locks << Locked[i];
        New_Locks.close();
        return;
    }
    else SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, "Congratulations!",
                                  "You won! Thank you for playing! Maybe once more?", window);
    return;
}
  • 0
    Мне нужно, чтобы первые 30 символов были полностью переписаны новыми. В противном случае при следующем запуске программы произойдет сбой из-за неправильного порядка информации (дополнительные 30 символов в начале). Количество непробельных символов в "levels.txt" должно быть постоянным. РЕДАКТИРОВАТЬ: почему вы удалили свой комментарий?
Теги:
file-io
fstream
ofstream
overwrite

1 ответ

1
Лучший ответ

использовать fstream вместо ofstream

ifstream предназначен только для чтения, ofstream для записи только, fstream делает оба.

Также обратите внимание: нет необходимости явно закрывать файлы. Деструктор fstream закроет их должным образом.

  • 0
    Ничего себе, я не думал, что решение было так просто! Спасибо вам большое! Задача решена!
  • 0
    Если вы записали в поток, вам лучше закрыть его явно, чтобы вы могли проверить состояние после закрытия и сообщить об ошибке, если это необходимо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню