《C++ open打开文件》一节中,详细介绍了文件流对象如何调用 open() 成员方法打开指定文件。相对应地,文件流对象还可以主动关闭先前打开的文件,即调用close()成员方法。

我们知道,调用 open() 方法打开文件,是文件流对象和文件之间建立关联的过程。那么,调用 close() 方法关闭已打开的文件,就可以理解为是切断文件流对象和文件之间的关联。注意,close() 方法的功能仅是切断文件流与文件之间的关联,该文件流并会被销毁,其后续还可用于关联其它的文件。

close() 方法的用法很简单,其语法格式如下:

void close( )

可以看到,该方法既不需要传递任何参数,也没有返回值。

举个例子:

#include

using namespace std;

int main()

{

const char *url="http://c.biancheng.net/cplus/";

ofstream outFile("url.txt", ios::out);

//向 url.txt 文件中写入字符串

outFile.write(url, 30);

//关闭已打开的文件

outFile.close();

return 0;

}

运行程序,在该程序同目录下会生成一个 url.txt 文件,其内部存储的数据为:

http://c.biancheng.net/cplus/

有些读者可能发现,即便上面程序中不调用 close() 方法,也能成功向 url.txt 文件中写入 url 字符串。这是因为,当文件流对象的生命周期结束时,会自行调用其析构函数,该函数内部在销毁对象之前,会先调用 close() 方法切断它与任何文件的关联,最后才销毁它。

强烈建议读者,使用 open() 方法打开的文件,一定要手动调用 close() 方法关闭,这样可以避免程序发生一些奇葩的错误!

值得一提的是,《C++处理输入输出错误》一节中介绍了 4 种流状态,它们也同样适用于文件流。当文件流对象未关联任何文件时,调用 close() 方法会失败,其会为文件流设置 failbit 状态标志,该标志可以被 fail() 成员方法捕获。例如:

#include

#include

using namespace std;

int main()

{

const char *url="http://c.biancheng.net/cplus/";

ofstream outFile;

outFile.close();

if (outFile.fail()) {

cout << "文件操作过程发生了错误!";

}

return 0;

}

程序执行结果为:

文件操作过程发生了错误!

c语言 close,C++ close()关闭文件方法详解相关推荐

  1. C++ close()关闭文件方法详解

    <C++ open打开文件>一节中,详细介绍了文件流对象如何调用 open() 成员方法打开指定文件.相对应地,文件流对象还可以主动关闭先前打开的文件,即调用 close() 成员方法. ...

  2. mysql 批量导入sql_MySQL高效导入多个.sql文件方法详解

    MySQL有多种方法导入多个.sql文件(里面是sql语句),常用的有两个命令:mysql和source. 但是这两个命令的导入效率差别很大,具体请看最后的比较. (还有sqlimport和LOAD ...

  3. java读写json格式的文件方法详解.txt,并批量存储进redis

    捐躯赴国难,视死忽如归.恸哭六军俱缟素,冲冠一怒为红颜.君子坦荡荡,小人长戚戚.风日晴和人意好,夕阳箫鼓几船归.民为贵,社稷次之,君为轻.Java 读写json格式的文件方法详解 文章录入:7747. ...

  4. C语言求最大公约数三种方法详解

    C语言求最大公约数三种方法详解 题目要求 常用写法(穷举法) 辗转相减法 辗转相除法 main函数 整体代码 题目要求 运行最大公约数的常用算法,并进行程序的调式与测试. 常用写法(穷举法) 从两个数 ...

  5. c语言 整数拆分,C++ 整数拆分方法详解

    一.问题背景 整数拆分,指把一个整数分解成若干个整数的和 如 3=2+1=1+1+1 共2种拆分 我们认为2+1与1+2为同一种拆分 二.定义 在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 ...

  6. 怎么运行java class_运行java的class文件方法详解

    一.运行class文件 执行带main方法的class文件,命令行为: java 注意:CLASS文件名不要带文件后缀.class 例如: 复制代码代码如下: java Test 如果执行的class ...

  7. svn服务端删除版本库_删除SVN目录及从服务器端删除SVN版本库文件方法详解

    删除SVN目录 当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,这里总结了一下在linux和win下的办法. 一.在linux ...

  8. java 运行class_运行java的class文件方法详解

    一.运行class文件 执行带main方法的class文件,命令行为: java 注意:CLASS文件名不要带文件后缀.class 例如: java Test 如果执行的class文件是带包的,即在类 ...

  9. 项目从服务器移除,删除SVN目录及从服务器端删除SVN版本库文件方法详解

    删除SVN目录 当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,这里总结了一下在linux和win下的办法. 一.在linux ...

  10. C语言丨数组越界及其避免方法详解

    来自公众号:技术让梦想更伟大 作者:李肖遥 所谓的数组越界,简单地讲就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外,这类错误也是 C 语言程序中最常见的错误之 ...

最新文章

  1. WCF扩展:行为扩展Behavior Extension一
  2. Thread 与Runnable区别详解
  3. 点赞功能,用 MySQL?还是 Redis!
  4. 想提升微服务容错性?试试这5种模式
  5. xxl子任务_XXL-JOB v2.1.2 发布,分布式任务调度平台
  6. python定义了函数却显示未定义_python
  7. Springboot利用poi导出excel下载
  8. MATLAB矩阵元素的处理
  9. linux select 服务器,Linux下用select()实现异步的Echo服务器
  10. Android中通过反射和getResource()得到id的方式去改变View的显示效果
  11. NTP授时服务器(网络校时服务器)对医院信息化建设的重要
  12. SpringBoot+logback优雅的配置日志!
  13. 2017 苹果强制https
  14. 《自然语言处理入门》何晗阅读笔记—第1章:自然语言处理基础概念
  15. 笔记本同时接入无线(外网)和有线(内网)
  16. processing画坐标系,画函数图像
  17. python防止源码泄露_ctf常见源码泄露 - Lmg66 - 博客园
  18. 什么是RBER(残余误比特率)FER(帧删除率)BER(误比特率)
  19. Perl qw()函数
  20. 动态分区分配及可重定位分区分配

热门文章

  1. Python图形界面实现咖啡店点单系统
  2. CSS的特殊性 (specificity)
  3. 易语言单窗口单ip软件源码_易语言助手下载-易语言助手 v3.2.0701 官方版
  4. mysql增加连接_mysql增加连接数
  5. SSRF漏洞修复方案
  6. 实时PPP多系统组合与单系统解算ZTD和Clock差异
  7. 数据链路层(以太网、MTU、ARP协议)
  8. [35期] 没有硝烟的战争
  9. Java基础-运算符
  10. MySQL讲义第50讲——select 查询之查询练习(八):查询每门课程成绩前三名的学生信息