C++ 挂起程序,直到流::flush()结束

C++ 挂起程序,直到流::flush()结束,c++,ofstream,C++,Ofstream,我在写入ofstream后刷新它,需要更新到实际文件并启动一个外部程序来打开它,我需要保持ofstream打开而不关闭它。我做到了: ofstream f("..", std::ofstream::out | std::ofstream::app | std::ofstream::trunc); f << data << std::endl; f.flush(); 流f的(“…”,std::ofstream::out | std::ofstream::app | std

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

ofstream f("..", std::ofstream::out | std::ofstream::app | std::ofstream::trunc);
f << data << std::endl;
f.flush();
流f的
(“…”,std::ofstream::out | std::ofstream::app | std::ofstream::trunc);
如果这是您的代码,那么“.”在ofstream f()的声明中不是有效的文件名。不创建任何文件是正常的。Flush应该足够用于文件使用。
同时追加和截断没有多大意义。

可能您的文件无法访问(独占共享),但仍被创建。

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

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

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

3.)确保系统上没有其他进程正在访问同一文件,例如,一旦该文件生效,立即将其删除


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

也许这会有所帮助:也许问题出在其他地方?我认为文件应该存在并且可以读取,即使它们还没有写入磁盘,使用f.flush()应该足够了。关闭或者睡觉可以吗?