close()关闭文件方法

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

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

void close( )

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

举个例子:

arduino 复制代码
    #include <fstream>
    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 文件,其内部存储的数据为:

c.biancheng.net/cplus/

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

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

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

arduino 复制代码
    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
        const char *url="http://c.biancheng.net/cplus/";
        ofstream outFile;
        outFile.close();
        if (outFile.fail()) {
            cout << "文件操作过程发生了错误!";
        }
        return 0;
    }

程序执行结果为:

复制代码
文件操作过程发生了错误!
相关推荐
ZhengEnCi10 分钟前
面试官为什么总问底层原理:你不是不如他,而是他被「筛选器」困住了
面试·程序员·求职
vortex521 分钟前
Windows Server IIS 运维配置指南:架构、身份、安全与排障
运维·windows·架构
mldong26 分钟前
工作流引擎的退回修改:金额从 6666 改成 666,重提还是回到退回它的那个人
后端·架构
陈随易27 分钟前
一个网吧网管,做了个网页,卖了 5000 万
前端·后端·程序员
dialect_8 小时前
KMP算法
开发语言·c++·算法
reikocao9 小时前
卡尔曼滤波的动态机制:P如何改变融合权重
算法
漂流瓶jz9 小时前
UVA-1612 猜名次 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·题解·排序·aoapc·算法竞赛入门经典
吞下星星的少年·-·10 小时前
Div.2 CF 1130B题(构造,贪心)
算法·贪心·构造
如约见11 小时前
技术岗的「本科及以上」,多是软门槛
程序员·学历·技术岗
海宇服务11 小时前
零信任架构实战:基于海宇全能小微企业报告构建自动化园区商户免押租赁资信核验网关
大数据·人工智能·架构·自动化