我有一个案例,我的程序写入磁盘,日志文件可能被某人删除,因此下次写入将失败。我们可以通过检查流标志再次打开文件而不是检查文件是否为每次写入打开来重复写操作吗?
性能如何比较(1)在写入之前存在统计检查文件(2),使用流标志来验证文件是否存在并在发生故障时重写。
有人可以提供使用流标志来检测写入文件是否成功的示例。我尝试创建文件流并休眠5秒钟,然后在程序恢复之前从shell中删除该文件。未设置文件流错误位。为什么呢?
示例:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream file_stream;
file_stream.open("something");
system("sleep 5");
for(int i = 0 ; i < 2000 ; i++) {
file_stream << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!
if(file_stream.fail()) {
cout << "file is gone ?";
}
}
file_stream.close();
return 0;
}
在这里当我执行程序并从另一个终端删除某些文件时,我永远不会让文件消失。也没有再创造一些东西。
答案 0 :(得分:0)
是的,你可以这样做。如果写操作以某种方式失败,则设置流状态ios_base::failbit
或ios_base::badbit
。