• fstream对象重复使用时注意clear()的调用


          fstream对象重复使用时注意clear()的调用,否则会造成打开第二个文件失败。这是因为一个fstream对象对应磁盘上的
    一个文件,这种绑定关系在调用open()函数或者构造函数时指定,但有时我们会重复使用同一个fstream对象先后绑定不同
    文件,在两次绑定中间仅仅调用close()是不够的(当然对close()的调用是必须的,每次打开文件使用完毕都必须关闭文件),
    因为close()函数并不会重置fstream的条件状态,如果先前的某个操作失败了,那么failbit的状态会一直保留下来,接下来
    对于条件状态的判断也一定是失败的,因此在使用同一个fstream对象绑定第二个文件之间需要调用clear()函数重置流的条件
    状态。

    //y.txt不存在,x.txt存在
    //注:此程序需在vs下运行才可得到理想结果,DEV应该是进行了优化,它的编译器应该是在将流对象与文件相关联时,自动重置了流状态 
    #include <iostream>
    #include <fstream>
    using namespace std;
    int main()
    {
        ifstream fin("y.txt");
        if(fin.fail())                //由于y.txt不存在,因此failbit为1,fin.fail()返回true 
            cout<<"fail to open y.txt"<<endl;
        fin.close();
    
        fin.open("x.txt");            //由于x.txt存在,因此关联文件成功 
        cout<<fin.is_open()<<endl;    //打开文件成功,fin.is_open()返回true(注:如果x.txt不存在,则打开文件失败,返回false) 
        cout<<fin.bad()<<endl;        //并没有非法操作流,因此fin.bad()返回false 
        if(fin.fail())                //由于failbit为1,因此fin.fail()继续返回true 
            cout<<"fail to open x.txt"<<endl;
        fin.close();
        return 0;
    }
  • 相关阅读:
    2019.9.21 Tomcat基于端口的虚拟主机
    shell脚本作业
    DNS原理及其解析过程
    用户管理系统脚本
    pxe批量装机
    磁盘分区挂载脚本
    安装apache脚本
    linux远程拷贝命令及not a regular file 解决方案
    卸载虚拟网卡的方法
    watch的用法
  • 原文地址:https://www.cnblogs.com/kevinq/p/4492206.html
Copyright © 2020-2023  润新知