挂起程序,直到ofstream::flush()完成

Suspend program till ofstream::flush() is finished

本文关键字:flush 完成 ofstream 程序 直到 挂起      更新时间:2023-10-16

我在写入ofstream后刷新它,并且需要更新到实际文件并启动外部程序来打开它,并且我需要保持ofstream打开而不关闭它。我:

ofstream f("..", std::ofstream::out | std::ofstream::app | std::ofstream::trunc);
f << data << std::endl;
f.flush();

但是当外部程序执行时,该文件甚至不存在。这里也是同样的问题。我如何阻止程序,直到文件在文件系统中实际存在?

如果这是你的代码,那么".."在ofstream f()的声明中不是一个有效的文件名。没有创建文件是正常的。对于文件使用,刷新应该足够了。追加和截断在一起没有多大意义。也许你的文件不能被访问(共享独占),但仍然被创建。

从应用程序的角度来看,一旦打开该文件进行写入,该文件就应该存在。通过执行以下步骤验证:

1)。打开与std::ifstream相同的文件。呼叫应该会成功。(除非在极少数情况下,您的std::ofstream在文件上创建了一个强制锁。)

2)。将std::ofstream修改为std::fstream。尝试从f.flush()之后的文件中读取。您应该能够检索data的值。如果没有,那么您可能在应用程序的某个地方弄乱了内存。

3)。确保系统上没有其他进程正在访问同一个文件,例如,在它恢复生命后立即删除它。

注意:操作系统或文件系统驱动程序需要一些时间来实际使任何文件更改对其他进程可用。在慢速存储或系统负载高时,此延迟可能特别长。您无法控制这种延迟。在这种情况下,您应该查看进程间同步。