使用 iostate 标志测试文件写入失败

Testing file write failure with iostate flags

本文关键字:失败 文件 测试 iostate 标志 使用      更新时间:2023-10-16

我有一个情况,我的程序写入磁盘,日志文件可能被某人删除,所以下次写入会失败。我们可以通过检查流标志而不是检查文件是否在每次写入时打开文件来再次打开文件后重复写入操作吗?

此外,性能将如何比较 (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;
}

在这里,当我执行程序并从另一个终端删除某些文件时,我永远不会得到文件消失。也不是再创造的东西。

是的,你可以这样做。如果写入操作以某种方式失败,则设置流状态ios_base::failbitios_base::badbit