在不覆盖原有内容的情况下写入文本文件

5
我正在用C++进行重力数值模拟,希望在每次计算完成后都能备份结果。然而,我目前的方法总是覆盖同一个文件。虽然我可以通过将文本保存到不同的文件或变量中来解决这个问题,但我想知道是否有更简单的方法来打开文本文件以避免覆盖它。我的当前“备份代码”如下:
fstream log;
log.open ("log.txt");
if (log.is_open())
{...
  ...
  log.close();
}
4个回答

12

以追加模式打开流:

log.open("log.txt", fstream::app);
这将简单地将新输出与现有内容附加在一起,形成一个随时间增长的大型日志文件。
一个建议(如果你还没有这样做)是在日志数据中包括某种时间戳,这样当你阅读文件时,你就可以将记录的数据与程序运行相关联。

谢谢你的建议。我确实计划在我的程序中这样做。然而,你发送的代码并不能工作,因为文件无法打开。我已经设置了一个条件——如果文件没有打开,就输出0。之前写的是1,现在我的命令行全是0... :( - Tom83B

3
使用log.open("log.txt", fstream::app)来追加文件。
阅读这篇参考资料以获取更多信息。
如果您需要一个复杂的记录和时间戳机制,可以查看有关C++记录框架的有用SO帖子Pantheios是被接受的答案。

我更喜欢自己完成日志记录机制,即使它可能会稍微(或者非常)糟糕。顺便说一下,我检查了链接,源代码无法运行... 我编译了它也不行。当我使用is_open()函数进行检查时,它返回了0。 - Tom83B

1

由于作者似乎对建议的答案有问题,我将添加另一个答案。

ofstream log;
log.open("log.txt", ofstream::app);

我猜使用显式流

ifstream

ofstream

有时候效果更好。虽然我不知道原因。


0

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