【发布时间】:2015-10-09 16:18:50
【问题描述】:
如果我的std::ofstream 可能已打开或未打开,那么无论如何尝试close 是否安全?换句话说,如果!is_open(),close() 会做任何令人讨厌的事情(抛出异常等)。例如
std::ofstream out;
if (some_condition)
{
out.open(path, std::ios::out);
}
在我处理完文件后,我可以说
out.close();
或者我应该先检查一下
if (out.is_open())
out.close();
cppreference上std::basic_fstream::close的唯一描述是
关闭相关文件。
有效地调用rdbuf()->close()。如果运行过程中出现错误,则调用setstate(failbit)。
【问题讨论】:
-
你可以让对象超出范围...
-
一般来说我就是这样做的,这就是我喜欢
std::ofstream的原因,但在这种特殊情况下,我希望文件比其他情况更早关闭。 -
如果您在 cppreference 上查看
std::ofstream::close,您会看到使用了在未打开的文件上调用close的具体示例。总而言之,没有发生任何令人讨厌的事情,它只是设置了故障位,因此您之后尝试对ofstream执行的任何操作都可能导致问题。 -
@R_Kapp 这不是 cppreference
-
@Cubbi:……我的咖啡呢?
标签: c++ file-io error-handling ofstream