使用 iostate 标志测试文件写入失败
Testing file write failure with iostate flags
我有一个情况,我的程序写入磁盘,日志文件可能被某人删除,所以下次写入会失败。我们可以通过检查流标志而不是检查文件是否在每次写入时打开文件来再次打开文件后重复写入操作吗?
此外,性能将如何比较 (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::failbit
或ios_base::badbit
。
相关文章:
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 包含模板文件的递归会导致编译失败
- 从 exe 文件 (Visual Studio ) 启动时调试断言失败
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 生成文件:6:目标'all'的配方在 Ubuntu-16.04 上失败
- Vcpkg Pango CMake 构建失败缺少头文件
- 两个线程一个使用流 Api,另一个线程创建文件失败并出现错误ERROR_SHARING_VIOLATION
- CMake 错误:链接器命令失败,退出代码为 1 和 cpp.o 文件
- fopen 在创建大量文件后因 EFBIG "File too large" 而失败
- CUDA opencv 构建失败 - 缺少实际存在的文件
- Xcode OSX上的C++构建失败,出现多个错误文件IO..不可用:在macOS 10.15中引入
- pip install uwsgi 失败,出现 /usr/local/include/string/string.h:7:10:致命错误:找不到'sstream'文件?
- 生成库失败:无法识别文件格式;作为链接器脚本处理
- bitbake-grpc交叉编译/配置失败,错误为c-ares::care引用文件/usr/lib/libcares.s
- 使用 ofstream 写入文本文件时断言失败
- 错误: /usr/bin/ld: 最终链接失败: 文件被截断
- 调试断言失败文件、令牌扫描程序和文本文件
- Qt Creator错误:LNK1123:转换到COFF时失败:文件无效或损坏