Данные не сохраняются в текстовом файле (библиотека C++ Fstream)

Я пытался сохранить счет игрока в игре в текстовом файле, но это не так. Это код, который я использую:

//some code above 

std::fstream TextScore ("Ranking.txt");


// some code above

if (Player->getFinal(Map) == true)
    {
        TextScore.open("Ranking.txt", ios::out);
        TextScore << Player->getPoints();
        TextScore.close();
        //some code below
    }

Затем я проверяю текстовый файл и ничего не было сохранено, файл пуст. Я хотел бы знать, что я пропускаю или делаю неправильно.

Заранее спасибо.

2 ответа

std::fstream TextScore ("Ranking.txt");

Это открывает файл, как будто TextScore.open("Ranking.txt"), std::ios::in|std::ios::out) назывался.

TextScore.open("Ranking.txt", std::ios::out);

Это открывает это снова.

Комбинация не будет работать, если файл уже существует. Первое открытие будет успешным, а второе - неудачным. После этого все операции ввода-вывода завершатся неудачно. Откройте его только один раз, либо в конструкторе, либо в отдельном open вызов. Самый идиоматический способ C++ был бы

{
  std::fstream TextScore ("Ranking.txt", std::ios::out);
  TextScore << Player->getPoints();
}

Нет необходимости явно закрывать файл благодаря RAII.

Открытие одного и того же файла дважды наверняка вызовет проблемы. Переместить определение TextScore в тело if заявление вместо вызова TextScore.open(), И тогда вы можете удалить звонок TextScore.close(); деструктор закроет файл.

Другие вопросы по тегам