数据未保存在文本文件中(C ++ Fstream库)

时间:2016-02-27 18:57:26

标签: c++ file 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 个答案:

答案 0 :(得分:3)

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

这会打开文件,就像调用TextScore.open("Ranking.txt"), std::ios::in|std::ios::out)一样。

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

这会再次打开它。

如果文件已存在,则该组合无效。第一次打开将成功,第二次打开将失败。之后,所有I / O操作都将失败。只需在构造函数中或在单独的open调用中打开它一次。最惯用的C ++方式是

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

由于RAII,无需明确关闭文件。

答案 1 :(得分:1)

两次打开同一个文件肯定会引起问题。将TextScore的定义移到if语句的正文中,而不是调用TextScore.open()。然后你可以删除对TextScore.close()的号召;析构函数将关闭文件。