无法在包含sleep()的循环中写入文件

时间:2011-07-12 19:18:13

标签: c++ file fstream

我的问题的本质是我无法使用sleep()在循环中写入文件。如果我有以下代码:

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

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

此代码完美无缺,并将HELLO重复打印到“file.name”中。但是,我想做这样的事情(我正在记录来自实时应用程序的数据):

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

这似乎没有在我的文件中打印任何内容。有什么想法吗?

3 个答案:

答案 0 :(得分:6)

您需要刷新输出。输出流将数据缓冲到内存中,但不将其写入磁盘。您应该使用std::endl(打印换行符和刷新)而不是字符串文字'\n',或使用std::flush显式刷新流:

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

答案 1 :(得分:3)

你正在寻找的神奇词是“同花顺”。

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

在睡眠之前,刷新文件,使其在缓冲区中没有待处理,等待有足够的更改来打扰写出。

答案 2 :(得分:2)

这可能只是一个缓冲问题。因为您现在编写的速度要慢得多,所以输出缓冲区的填充速度不会太快,因此您可能无法“看到”写入的数据。尝试在睡眠前添加flush()

file.flush()