2012-07-20 39 views
2

我正在寫一個程序,在完成時生成一個大型日誌文件(+ 10GB)。爲了將其分開,在我的日誌記錄功能中,我將n行的輸出重定向到一個新的文件名。用於記錄已發送到流的字節數的輕量級方法?

但是,這個文件中的一些行可能很大(+ 100k字符),有些不超過10個字符,而大的可以聚集。我更願意按字節大小來分割輸出,而不是按行。

什麼是最輕量級的方法來保持已發送到C++流的字節數的持續跟蹤?

回答

3

如果您使用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以來的綁定輸出流。

+0

你期望文件大小等於'file.tellp()* sizeof(char)'嗎? – HorseloverFat 2012-07-20 22:29:01

+0

是的,我期望如此,但仍然寫一點測試來說服自己。 – mavam 2012-07-20 22:51:23

+0

好的,謝謝你指出我在正確的方向,這很好地工作。 – HorseloverFat 2012-07-20 23:10:27