2

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

此外,性能将如何比较(1)Stat在写入之前检查文件是否存在(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;
}

在这里,当我执行程序并从另一个终端删除文件时,我从来没有得到文件消失了。也不会再次被创造。

4

1 回答 1

0

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

于 2013-10-26T01:52:58.150 回答