私が成長しているファイル(tail -F
が何に似たもの)から読み取るしようとしていますが、私のコードにいくつかの問題がなければならない:C++で成長するテキストファイルを読むには?
string log, logFile("test.log");
size_t p = 0;
while(true)
{
ifstream ifs(logFile.c_str());
ifs.seekg(p); //*1
while(ifs.eof() == false)
{
getline(ifs, log);
cout << log << endl;
p = ifs.tellg(); //*2
}
nanosleep(&pause, NULL);
}
// * 1ラインなし
と// * 2の場合、ログファイルは正しく読み込まれますが、新しい行が追加されても何も起こりません。
seekgとtellgを使ってファイルの現在の終了位置を保存しようとしています。再オープンするとそこに行き、追加された内容を読むことができます。
私のコードで何が間違っているのか、この目的のために同じファイルを閉じて再度開く必要があるのかどうかを知りたいと思います。
ありがとうございます。
適切に動作しています。ありがとうございました。 – Pietro
ループにifstreamオブジェクトを作成すると動作することに気がつきましたが、外部に作成するとそれが動作しません。ファイルを閉じて再オープンする必要がありますか? – Pietro
@Pietroの場合、次の読み込み試行の前に 'ifs.clear()'を呼び出すことによって 'ifstream'のeof状態をクリアする必要があります。このアプローチでは 'tellg()'と 'seekg()'は不要です。 – hmjd