我正在编写一个在完成时生成一个大日志文件(+10GB)的程序。为了拆分它,在我的日志记录功能中,一旦n
写入行,我就会将输出重定向到一个新的文件名。
但是,此文件中的某些行可能很大(+100k 字符),有些不超过 10 个字符,大的可以聚集在一起。我宁愿按字节大小而不是按行拆分输出。
持续跟踪已发送到 c++ 流的字节数的最轻量级方法是什么?
如果您使用 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 以来的绑定输出流。