你能安全地关闭一个从未打开过的文件吗?
Can you safely close a file that was never opened?
如果我有一个 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
的唯一描述是
Closes the associated file.
Effectively calls rdbuf()->close()
. If an error occurs during operation, setstate(failbit)
is called.
来自 C++ 标准,§27.9.1.4 [filebuf.members],第 6 段:
basic_filebuf<charT,traits>* close();
Effects: If is_open() == false
, returns a null pointer.…
是的,您始终可以close()
文件,即使文件未打开。
不管LINUX还是Windows,我总是close()
不去想它们是否打开了。
来自LINUX:
void
close()
{
if (!_M_filebuf.close())
this->setstate(ios_base::failbit);
}
它完全按照 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;
}
在与操作系统的交互方面,没有什么可以关闭的,但在其他方面无害。
如果我有一个 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
的唯一描述是
Closes the associated file.
Effectively callsrdbuf()->close()
. If an error occurs during operation,setstate(failbit)
is called.
来自 C++ 标准,§27.9.1.4 [filebuf.members],第 6 段:
basic_filebuf<charT,traits>* close();
Effects: Ifis_open() == false
, returns a null pointer.…
是的,您始终可以close()
文件,即使文件未打开。
不管LINUX还是Windows,我总是close()
不去想它们是否打开了。
来自LINUX:
void
close()
{
if (!_M_filebuf.close())
this->setstate(ios_base::failbit);
}
它完全按照 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;
}
在与操作系统的交互方面,没有什么可以关闭的,但在其他方面无害。