1

我有一个类 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");

可以简化这种大杂烩的异常吗?

4

1 回答 1

0

让事情变得不那么混乱的一种方法是创建一个资源处理对象 - 所以一个“临时文件”对象,它通过给构造函数的名称打开一个新文件,如果文件名不为空,则在析构函数中调用 unlink . 然后让它有一个重命名函数,例如重命名文件并将名称设置为空白。当然还有一个函数可以为您提供来自对象的 ofstream。

我敢肯定它的代码量一样多,但它看起来会更干净,它会让生活变得更轻松。

编写处理大量潜在错误的代码并不容易,正如您可能已经注意到的那样......

于 2012-12-28T16:08:10.993 回答