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

17

我正在尝试制作一个游戏,将高分数保存到一个.txt文件中。我有一个问题:当我编写以下代码时:

ofstream fout("filename.txt");

这会创建一个以该名称命名的文件,还是只查找具有该名称的文件?

问题是每当我重新启动程序并执行以下语句:

fout << score << endl << player; 

它覆盖了我的先前分数!

当我写入文件时,有没有办法使新分数不覆盖旧分数?

2个回答

36

std::ofstream 默认创建新文件。你需要使用追加参数创建文件。

ofstream fout("filename.txt", ios::app); 

7
为了完整起见,这是 std::ios::app。因为 iosstd 命名空间内的一个命名空间。 - Moha the almighty camel

14
如果您只想将内容追加到文件末尾,您可以以追加模式打开文件,这样任何写入操作都会在文件末尾执行,并且不会覆盖之前存在的文件内容。
ofstream fout("filename.txt", ios::app);
如果你想覆盖文本文件中的特定行而不是仅在末尾附加数据,那么最好先读取文件并解析数据,然后对其进行修复(添加、删除、编辑等),最后将所有内容重新写入文件中。

如果你的文件非常大,比如说100GB,那么读取文件、解析和写回所有内容显然不是一个好主意,这将需要大量的计算能力,更不用提RAM和磁盘读写速度了。 - Paolo Celati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接