【问题标题】: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();
}

【问题讨论】:

    标签: c++ textinput numerical


    【解决方案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/

      【讨论】:

        猜你喜欢
        • 2012-04-15
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2020-03-28
        • 2016-04-25
        • 1970-01-01
        • 2012-06-18
        相关资源
        最近更新 更多