用于记录已发送到流的字节数的轻量级方法?

时间:2012-07-20 19:03:36

标签: c++ stream

我正在编写一个程序,在完成时会生成一个大型日志文件(+ 10GB)。要将其拆分,在我的日志记录功能中,一旦n行被写入,我就会将输出重定向到新的文件名。

但是,此文件中的某些行可能很大(+ 100k字符),有些行不超过10个字符,大字符可以聚类。我宁愿按大小以字节而不是按行分割输出。

用于持续跟踪已发送到c ++流的字节数的最轻量级方法是什么?

1 个答案:

答案 0 :(得分:3)

如果您使用的是std::ostream,请查看tellp()成员函数,该函数返回放置区域的当前位置。您可以将其用作写入的字节数的代理。 E.g:

std::ofstream file(name);
auto i = file.tellp();
// write large log file.
auto j = file.tellp();

if (i != -1 && j != -1) // tellp returns -1 on error.
  std::cout << "bytes written: " << j - i << std::endl;

另请注意,虽然tellp刷新了自C ++ 11以来绑定的输出流。

相关问题