写入文本文件而不覆盖它
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/
【讨论】:
以上是关于写入文本文件而不覆盖它的主要内容,如果未能解决你的问题,请参考以下文章