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

Can you safely close a file that was never opened?

本文关键字:文件 一个 安全      更新时间:2023-10-16

如果我有一个可能已打开也可能未打开的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();

cppresence上对std::basic_fstream::close的唯一描述是

关闭关联的文件
有效地调用rdbuf()->close()。如果在操作过程中发生错误,则调用setstate(failbit)

它完全按照cppreference所说的去做:将设置故障位,您可以使用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;
}

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

来自C++标准§27.9.1.4[文件成员],第6段:

basic_filebuf<charT,traits>* close();
 nbsp;效果:如果是is_open() == false,则返回一个空指针…

是的,您可以始终close()文件,即使文件没有打开。无论是LINUX还是Windows,我总是close()而不考虑它们是否已打开。

来自LINUX:

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