挂起程序,直到ofstream::flush()完成
Suspend program till ofstream::flush() is finished
我在写入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)。确保系统上没有其他进程正在访问同一个文件,例如,在它恢复生命后立即删除它。
注意:操作系统或文件系统驱动程序需要一些时间来实际使任何文件更改对其他进程可用。在慢速存储或系统负载高时,此延迟可能特别长。您无法控制这种延迟。在这种情况下,您应该查看进程间同步。
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 用C++在单独的头文件中完成函数体
- 等待整个 omp 块完成,然后再调用第二个函数
- 不必要的C++代码最终会出现在我完成的程序中吗?
- C++一个线程如何正确通信其任务已完成?
- 如何使用libav编写.mov文件,如果文件未正确完成,则可以播放
- 修复完成输入后重复"enter names of teacher"?
- async_write完成处理程序最早何时完成?
- 而不是那么多的 if 语句,我想要一个逻辑,我可以用一个语句或优化的方式来完成
- 对于完成布尔值设置为 true 后未停止的循环
- 如何完成内存分配
- 如何根据C++在同一内存位置重新初始化 C# 中的对象(还是自动完成)?
- Bash 自动完成一个选项,而不运行应用程序
- 选择排序时交换函数调用的数量和完成的交换次数是否相同?
- Qt5 - 如何将"QList<T> *"指针作为信号参数传递,并在完成后将其删除?
- C++ IDE 不会推断/自动完成对模板类中的 std::array 下标表达式的成员访问
- std::stringstream::flush() 应该做什么吗?
- 链接器输入文件未使用,因为链接未完成,我无法获得.o
- CLion、MinGW 和 SDL2:进程已完成,退出代码为 -1073741515 (0xC0000135)
- 挂起程序,直到ofstream::flush()完成