写入文本文件而不覆盖它

Posted

技术标签:

【中文标题】写入文本文件而不覆盖它【英文标题】:Writing into a text file without overwriting it 【发布时间】:2011-05-08 12:27:27 【问题描述】:

我正在用 C++ 对重力进行数值模拟,我想在每次计算单个步数时备份我的结果。

但是,按照我现在的方式,程序总是会覆盖文件。我想我可以通过始终将文本保存在不同的文件或变量中来解决,但我想知道是否有更简单的方法可以打开文本文件,这样我就不会覆盖它。

我当前的“备份代码”如下所示:

fstream log;
log.open ("log.txt");
if (log.is_open())
...
  ...
  log.close();

【问题讨论】:

【参考方案1】:

以追加模式打开流:

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

这将简单地将新输出附加到现有输出中,为您提供一个随时间增长的大日志文件。

一个建议(如果您还没有这样做的话)是在记录数据中包含某种时间戳,这样当您读取文件时,您可以将记录的数据与程序的运行相关联。

【讨论】:

感谢您的建议。我确实计划在我的程序中这样做。但是,您发送的代码仅因为文件未打开而无法正常工作。我设置了一个条件——如果文件没有打开,cout 【参考方案2】:

使用log.open("log.txt", fstream::app) 附加到文件。

阅读this 参考以获取更多信息。

如果您需要一种复杂的日志记录和时间戳机制,有一个有用的 SOpost 关于 C++ 的日志记录框架。 Pantheios 得到了接受的答案。

【讨论】:

如果我自己设法完成日志记录机制,我更愿意——即使稍微(/很多)更糟。顺便说一句,我检查了链接,但源代码不起作用……我编译了它,但它不起作用。当我用 is_open() 函数检查它时,它返回 0【参考方案3】:

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

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

我猜想使用显式流

如果流

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

【讨论】:

【参考方案4】:

将模式设置为追加。看到这个: http://www.cplusplus.com/reference/iostream/fstream/open/

【讨论】:

以上是关于写入文本文件而不覆盖它的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qfile 中写入而不覆盖? [复制]

PHP 中如何在同一个文件中写入而不覆盖以前写的内容

附加到文本文件(不覆盖!)

如何在java中的文本文件中写入而不删除之前的文件内容

避免在 R 中覆盖文本文件

将输出保存到文本文件而不覆盖和打印矩阵中的 N 个条目 [matlab]