gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:43 25 4
gpt4 key购买 nike

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

还有性能如何比较(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;
}

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

最佳答案

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

关于c++ - 使用 iostate 标志测试文件写入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19601811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com