写入文件时,请避免覆盖现有文件的内容

Mon*_*tor 16 c++ ofstream

我正在尝试将一个实现高分的游戏制作成.txt文件.我的问题是:当我发表如下声明:

ofstream fout("filename.txt");
Run Code Online (Sandbox Code Playgroud)

这是创建具有该名称的文件,还是只查找具有该名称的文件?

问题在于,每当我重新启动程序并做出以下声明时:

fout << score << endl << player; 
Run Code Online (Sandbox Code Playgroud)

它会覆盖我之前的分数!

有没有办法让我这样做,以便在我写入文件时新分数不会覆盖旧分数?

J. *_*eja 34

std::ofstream默认情况下创建一个新文件.您必须使用append参数创建文件.

ofstream fout("filename.txt", ios::app); 
Run Code Online (Sandbox Code Playgroud)

  • 只是为了完整性,它是`std :: ios :: app`.因为`ios`是`std`命名空间内的命名空间 (4认同)

Set*_*gie 13

如果您只想附加到文件末尾,则可以在追加模式下打开文件,因此任何写入都在文件末尾完成,并且不会覆盖以前存在的文件内容:

ofstream fout("filename.txt", ios::app);
Run Code Online (Sandbox Code Playgroud)

如果你想用数据覆盖特定的文本行而不是用附加模式将它们添加到最后,你可能最好不要读取文件并解析数据,然后修复它(添加任何内容,删除任何内容,编辑无论如何)并将它全部写回文件.