2011-07-12 25 views
0

私の問題の本質は、sleep()でループ内のファイルに書き込むことができないことです。私は次のコードがある場合:sleep()を含むループ内のファイルに書き込めません

ofstream file 
file.open("file.name"); 

for(;;) { 
    file << "HELLO\n"; 
} 

このコードは、完全に動作し、 "file.name"に繰り返しHELLOを印刷します。しかし、私はこのような何かをしたい(私はリアルタイムアプリケーションからのデータを記録しています):

for(;;) { 
    file << "HELLO\n"; 
    sleep(1); 
} 

これは私のファイルに何を印刷していないようです。何か案は?

+0

どのように「C」タグを除去することができますか? – KevinDTimm

+0

@KevinDTimm - 質問を編集して:-) – Roddy

+0

@Roddy - 私はそれを試しました、どのように見えませんでしたか(oops、nevermind ---) – KevinDTimm

答えて

6

出力をフラッシュする必要があります。出力ストリームは、データをメモリにバッファリングしますが、ディスクに書き出すことはありません。あなたはどちらか'\n'リテラル文字列の代わりに(改行やフラッシュを印刷した)std::endlを使用する、または明示的にstd::flushでストリームをフラッシュする必要があります。

for(;;) { 
    file << "HELLO" << endl; 
} 
// or 
for(;;) { 
    file << "HELLO\n" << flush; 
} 
+0

優秀、ありがとうございます!その間、ループの各繰り返しでファイルハンドルを繰り返し開閉することで迅速に修正しましたが、これはフラッシュを完了している必要があります。 – vette982

3

あなたが探している魔法の言葉は "フラッシュ"です。睡眠前

c++ std::ofstream flush() but not close()

、それが出て書き込みを気にする変更の十分があることが待っているバッファに保留されないようにファイルをフラッシュします。

2

これはたぶんバッファリングの問題です。今はずっと遅く書いているので、出力バッファは非常に速くいっぱいになるので、書かれたデータを見ることはできません。睡眠の前にflush()を追加してみてください。

file.flush() 
関連する問題