如果我有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)
。
答案 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);
}