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;
}
fstream对象重复使用时注意clear()的调用的更多相关文章
- Java : 对象不再使用时,为什么要赋值为 null ?
今天遇到一个比较有意思的问题,对象不再使用时,为什么要赋值为 null ? 在这里我看到一篇文章说的不错,下面是网址,有兴趣的IT友可以看看. https://mp.weixin.qq.com/s/Z ...
- DbFunctions 作为 LINQ to Entities 查询的一部分使用时,此方法调用规范 CreateDateTime EDM 函数以创建新的 DateTime 对象。
DbFunctions.CreateDateTime CreateDateTime(year, month,day,hour,minute,second)
- getContext在谷歌浏览器中,使用时要先加载canvas对象,否则会提示'getContext is null'
<body> <canvas id=" style="border:1px solid #c3c3c3;"> Your browser does ...
- [开发笔记]-sqlite数据库在使用时遇到的奇葩问题记录
有时候做些简单的项目一般都会选择sqlite数据库,优点有很多,这里就不详细说了. 在此主要记录一些平时在使用时遇到的问题及解决方法.希望能对大家有所帮助. --------------------- ...
- PowerDesigner15使用时的十五个问题
15个问题列表: No.1:是不是一定要从CDM开始设计,然后在进行PDM的设计? NO.2:工具栏palette不见了,如何把它找出来? NO.3: 如何建立与数据库的关联? NO.4: 域和数据项 ...
- 【css】max-height,min-height,height一起使用时,优先级问题
MDN说法: max-height 这个属性会阻止 height 属性的设置值变得比 max-height 更大. max-height 属性用来设置给定元素的最大高度. 如果height 属性设置的 ...
- free函数使用时的注意事项。
free函数是我们在写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核. 注意:free函数与malloc()函数配对使用,malloc函数释放申请的动态内存.对于free(p)这 ...
- MySQL数据库使用时注意事项
MySQL数据库使用时注意事项 建表的角度上 1.合理安排表关系 2.尽量把固定长度的字段放在前面 3.尽量使用char 代替varchar 4.分表:水平分和垂直分 在使用sql语句的时候 1.尽量 ...
- Android插件化(三):OpenAtlas的插件重建以及使用时安装
Android插件化(三):OpenAtlas的插件重建以及使用时安装 转 https://www.300168.com/yidong/show-2778.html 核心提示:在上一篇博客 An ...
随机推荐
- Android手机指令操作释疑
有人问我一个关于Android手机root与否的问题,她说明明iTools显示已取得root权限,但她就是没法在该手机上运行需要root权限的App如钛备份等等.我告诉她最好的确认方式便是以adb指令 ...
- php+mysql简单留言,适合新手
<html> <head> <title> php留言板 </title> <style> p,textarea{vertical-alig ...
- leetcode3:不重复的最长子串长度
package hashmap; import java.util.HashMap; import java.util.Map; public class hashmap { public stati ...
- Linux中与环境变量相关的函数
1.在终端可以通过env.set命令查看当前的环境变量 2.通过main函数中的第三个参数可以得到当前进程的环境变量列表 int main(int argc , char *argv[] , char ...
- HTML新特性之一----canvas
<canvas id="me"></canvas>//申请一个canvas标签 <script> var c ...
- scribe日志分析工具安装
系统CentOS6.2 x86_64 1.yum安装gcc,flex,m4,python/python-devel,ruby,libevent/libevent-devel,openssl/opens ...
- 合并多个List<T>类型并通过LINQ按指定属性排序
后台CS代码: namespace WebFormTest.TestCollect { public partial class ListTest : System.Web.UI.Page { pro ...
- Cassandra 备份 - 1 - 节点镜像恢复
之前比较关注如何使用Cassandra,但是真正想大规模使用前提还是需要搞清楚备份机制,确保数据安全. 本文主要内容来自文档 "Cassandra2.2"的翻译.最后部分为真实操作 ...
- 如何将两个列表变成一个python字典
一个列表是 index = [0, 1, 2, 3, 4, 5, 6] 另一个是 day = ['1', '2', '3', '4', '5', '6', '7' ] 可以使用dict(zip(ind ...
- 数据结构学习笔记05图(最小生成树 Prim Kruskal)
最小生成树Minimum Spanning Tree 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 树: 无回路 |V|个顶 ...