2

完了時に大きなログファイル(+ 10GB)を生成するプログラムを書いています。これを分割するために、ログ関数で、n行が書き込まれると出力を新しいファイル名にリダイレクトします。

ただし、このファイルの一部の行は巨大になる可能性があり(+ 100k文字)、一部は10文字以下であり、大きな行はクラスター化できます。行ではなく、バイト単位のサイズで出力を分割したいと思います。

C ++ストリームに送信されたバイト数を継続的に追跡するための最も軽量な方法は何ですか?

4

1 に答える 1

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 以降、関連付けられた出力ストリームをフラッシュすることにも注意してください。

于 2012-07-20T19:09:34.840 に答える