你能安全地关闭一个从未打开过的文件吗
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();
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);
}
相关文章:
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 挂起和取消挂起一个文件DLL
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- C++试图读取一个文件并输出到另一个文本文件
- 如何从另一个文件继承私有成员变量和公共函数
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何打开并写入一个名称取自C++中字符串的文件
- 构建一个由C和C++文件组成的库
- c++多进程编写一个唯一的文件
- 如何使用CLion在Mac上创建一个新的.txt文件
- 如何将class.cpp和class.hpp编译为一个.o文件
- 写入文件会产生一个空文件或根本没有文件
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 生成一个生成文件,该生成文件使用Automake在一个步骤中编译和链接所有源文件
- 为什么我的 heap.h 文件给我一个LNK2001错误?
- Pantheios 不使用 MFC 应用程序写入一个文件(一个 exe + 两个 DLL)
- 在C++中一次读取一个文件一个int
- 输入/输出文件(一个字母的大写)
- 如何使用两个预编译的头文件.一个用于托管代码,另一个用于非托管代码.xxx.PCH不是一个有效的预编译头文件