【问题标题】:Best practice for writing to multiple files at different frequency?以不同频率写入多个文件的最佳实践?
【发布时间】:2014-08-13 20:48:03
【问题描述】:

寻找在系统 (C++) 中管理文件输出的最佳方法。提前感谢您的回复!

系统:

  • 连续数周不间断运行
  • 只有特定秒的信息需要写入文件(直到秒结束才能预先确定)
  • 一种日志/调试类型的文件将以更高的频率(比如每 1-60 秒)和更大的块(每次 0.1-0.5k,可能每分钟几 k)写入。
  • 一种摘要类型的文件将以较低的频率(例如每 5-30 分钟)和较小的块(一个短行)写入

我的想法:

  • 有两个ofstreams,每个文件一个

    • 问题 1:必要时只使用一个 ofstream 和 switch 文件属性会更好吗?
  • 创建两个 std::strings 来存储每秒的潜在信息。然后在第二个结束时,如果需要将信息写入一个或多个文件,打开文件,写入,然后关闭。

    • 问题 2:字符串是一个好的支架吗?是否有某种缓冲区我可以在不刷新的情况下写入,然后在第二秒结束时我决定是丢弃还是刷新?

    • 问题 3:鉴于较大的文件可能每秒都被频繁写入,我们是否每秒都打开/关闭?一直保持打开状态会更好吗?

感谢您的宝贵时间。

【问题讨论】:

  • 1.每个文件我会有一个单独的 ofstream 。但是,我不知道您是否应该关闭并重新打开它们或保持它们始终打开。 2. string 或 stringstream 都不错。它们在内存中,因此您可以随意使用它们。
  • 您需要在系统工作时读取这些文件吗?如果不是,我会在系统工作时保持文件打开。
  • 我不需要读取任何一个文件。都是只写的。
  • 1) 是的,请 2 个流! 2)字符串是一个很好的持有者,但如果系统不停地工作,写在流程上似乎很有趣,记住字符串和未刷新的io会随着断电而消失。 3)保持开放。或者编写几个较小的日志文件(就像一些数据库服务器那样),并在其名称中使用顺序编号方案。

标签: c++ file-io ofstream


【解决方案1】:
  • 答案 1:使用单独的 ofstream(每个文件一个)。
  • 答案 2:可以使用 ostringstream 存储部分信息。
  • 答案 3:只有在不需要读取文件时才能保持文件打开。无论如何,每秒打开/关闭并不是那么昂贵

【讨论】:

  • 如果我保持文件打开,我是否需要经常使用 std::endl (刷新输出)?如果是这样,多久一次?
猜你喜欢
  • 2010-09-26
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多