带有异常的c++流的错误检查
Error checking C++ streams with Exceptions
我有一个类X,它有一个writeBinary(ostream)方法,可以抛出一个自定义异常如果流发生了什么
写fstream和错误检查的正确方法是什么?
这是我的版本:我想知道我是否错过了什么,或者我需要抓住错误。
ofstream ofs("X.binary.tmp");
if (!ofs) {
cerr << "Could not open file for writing";
throw runtime_error("Could not open file for writing");
}
try {
x.writeBinary(ofs);
} catch(CustomException& e) {
// remove the temporary file
int x = unlink("X.binary.tmp");
if (x) {
cerr << "Failed to remove file";
}
throw;
}
if (!ofs) { // is this check necessary?
int x = unlink("X.binary.tmp"):
if (x) {
cerr << "Failed to remove file";
}
throw std::runtime_error("Stream error");
}
rename("X.binary.tmp", "X.binary");
异常的大杂烩可以简化吗?
使事情变得不那么混乱的一种方法是创建一个资源处理对象-所以一个"tempfile"对象,它通过给定给构造函数的名称打开一个新文件,并且在析构函数中调用unlink,如果文件名不是空的。然后让它有一个重命名函数,例如重命名文件并将名称设置为空白。当然还有一个函数,它给出了对象的流。
我相信代码还是一样多,但是看起来会干净得多,而且会让生活更轻松。
正如你可能已经注意到的那样,编写处理大量潜在错误的代码并不容易……相关文章:
- C++中的输入限制和错误检查
- 在错误检查非 int 的内容时,控制台被淹没
- C++ 错误检查 fstream open() 命令和一般字符串流错误处理
- 运行时与编译时多态性:更好的可读性与编译时错误检查,更重要的是
- NPP 和 CUDA 错误检查
- 在此程序中获取错误:检查两个数组是否相等
- 错误 ~ 检查字符是否为小写字母
- 同时循环到错误检查 C++
- clang format函数和错误检查在同一行
- 使用宏进行赋值和错误检查
- 在C++中将命令行字符参数解析为int并进行错误检查
- 使用 Makefiles 在 Eclipse CDT 中进行错误检查
- 数据文件处理中的错误检查是否可以打开文件 - 为什么会发生
- 通过错误检查将参数转换为整数
- 这种错误检查方法的性能会不会太高
- C++通过错误检查将sscanf代码改编为distingstream
- 在windows错误检查中使用c++向gmail帐户发送电子邮件
- C++ 卷曲文件下载 - 错误检查
- 通过错误检查将 wstring 转换为双精度的方法
- 如何使用标准库函数通过错误检查将字符串 (char*) 转换为数字