我在写入后刷新了ofstream,并且需要更新到实际文件并启动一个外部程序来打开它,我需要保持ofstream打开而不关闭它。我做了:
ofstream f("..", std::ofstream::out | std::ofstream::app | std::ofstream::trunc);
f << data << std::endl;
f.flush();
但是外部程序执行时文件甚至不存在。同样的问题here。如何阻止程序直到文件实际存在于文件系统中?
答案 0 :(得分:2)
如果那是您的代码,那么“..”不是ofstream f()声明中的有效文件名。没有文件创建是正常的。 Flush应该足以用于文件使用。 追加和截断一起没有多大意义。 也许你的文件无法访问(共享独占)但仍然被创建。
答案 1 :(得分:1)
从您的应用程序的角度来看,一旦您打开文件进行写入,该文件就应该存在。通过执行以下步骤验证:
1。)打开与std::ifstream
相同的文件。电话应该成功。 (在极少数情况下,std::ofstream
会在文件上创建一个强制锁定。)
2.。)将std::ofstream
更改为std::fstream
。尝试在f.flush()
之后读取文件。您应该能够检索data
的值。如果没有,那么你可能已经在应用程序的某个地方弄乱了你的记忆。
3.确保系统上没有其他进程访问同一文件,例如一旦生命就将其删除。
注意:操作系统或文件系统驱动程序需要一些时间来实际使其他进程可以使用任何文件更改。在缓慢存储或系统负载较高时,此延迟可能特别长。您无法控制此延迟。在这种情况下,您应该研究进程间同步。