2

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

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

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

4

1 回答 1

3

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

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 以来的绑定输出流。

于 2012-07-20T19:09:34.840 回答