你能安全地关闭一个从未打开过的文件吗?

时间:2015-10-09 16:18:50

标签: c++ file-io error-handling ofstream

如果我有std::ofstream可能已打开或未打开,那么尝试close是否安全无论如何?换句话说,如果close()!is_open()会做任何令人讨厌的事情(抛出异常等)。例如

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)

2 个答案:

答案 0 :(得分:13)

它完全符合cppreference所说的:failbit将被设置,你可以使用fail()方法检查它。例如,以下打印“fail \ n”:

#include <iostream>
#include <fstream>
int main(int argc, char ** argv)
{
        std::ofstream out;
        out.close();
        if (out.fail())
                std::cout << "fail" << std::endl;
        return 0;
}

在与操作系统的交互方面,没有什么可以关闭,但它是无害的。

答案 1 :(得分:6)

是的,您可以始终close()该文件,即使文件未打开也是如此。 无论是LINUX还是Windows,我总是close()而不考虑它们是否被打开。

来自LINUX:

void
close()
{
     if (!_M_filebuf.close())
        this->setstate(ios_base::failbit);
}