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

Can't write to file in a loop containing sleep()

本文关键字:循环 文件 包含 sleep      更新时间:2023-10-16

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

ofstream file
file.open("file.name");
for(;;) {
    file << "HELLOn";
}

这段代码工作完美,并将HELLO反复打印到"file.name"中。然而,我想做这样的事情(我正在记录来自实时应用程序的数据):

for(;;) {
    file << "HELLOn";
    sleep(1);
}

这似乎没有打印任何东西到我的文件。什么好主意吗?

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

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

你要找的神奇词是"flush"。

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

在休眠之前,刷新文件,这样它就不会挂起在缓冲区中,等待有足够的更改来麻烦地写出来。

这可能只是一个缓冲问题。因为你现在写得慢了很多,输出缓冲区不会很快填满,所以你可能看不到写的数据。尝试在睡眠前添加flush()。

file.flush()