zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    青岛公交查询
    Windows8应用生命周期 Metro Style Apps Lifecycle
    Mac下发布Qt应用程序
    Git命令笔记本
    IOS中 自定义访问用户Location时的提示信息
    使用OpenSSL发送IOS推送通知 Apple Push Notification
    最简单的iOS MapView标记点纠偏的方法
    罗技产品序列号追溯条码扫描系统
    展厅样品条形码报价管理系统
    Denso条码采集器程序开发2编译环境的搭建
  • 原文地址:https://www.cnblogs.com/kevinq/p/4492206.html
Copyright © 2011-2022 走看看