2
我正在寫一個程序,在完成時生成一個大型日誌文件(+ 10GB)。爲了將其分開,在我的日誌記錄功能中,我將n
行的輸出重定向到一個新的文件名。用於記錄已發送到流的字節數的輕量級方法?
但是,這個文件中的一些行可能很大(+ 100k字符),有些不超過10個字符,而大的可以聚集。我更願意按字節大小來分割輸出,而不是按行。
什麼是最輕量級的方法來保持已發送到C++流的字節數的持續跟蹤?
我正在寫一個程序,在完成時生成一個大型日誌文件(+ 10GB)。爲了將其分開,在我的日誌記錄功能中,我將n
行的輸出重定向到一個新的文件名。用於記錄已發送到流的字節數的輕量級方法?
但是,這個文件中的一些行可能很大(+ 100k字符),有些不超過10個字符,而大的可以聚集。我更願意按字節大小來分割輸出,而不是按行。
什麼是最輕量級的方法來保持已發送到C++流的字節數的持續跟蹤?
如果您使用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以來的綁定輸出流。
你期望文件大小等於'file.tellp()* sizeof(char)'嗎? – HorseloverFat 2012-07-20 22:29:01
是的,我期望如此,但仍然寫一點測試來說服自己。 – mavam 2012-07-20 22:51:23
好的,謝謝你指出我在正確的方向,這很好地工作。 – HorseloverFat 2012-07-20 23:10:27