为什么同一个文件流对象第二次打开文件就不行了呢

时间:2022-11-07 17:26:20
麻烦大家帮我看看代码好吗,谢谢了。
#include <fstream>
#include <iostream>

using namespace std;
int main()
{int i;
   //ifstream infile1;
ifstream infile("c:\\dev-cpp\\20\\in_order.dat",ios::in);
if(!infile) cout<<"open error 1"<<endl;
else {char data;
while(!infile.eof())
infile>>data;
infile.close();
}
infile.open("c:\\dev-cpp\\20\\in_order.dat",ios::in);
if(!infile) cout<<"open error 2";
else 
  cout<<infile.eof();
  cin>>i;
}
程序运行后输出open error 2,为什么我第二次打开就失败呢(同一个文件流对象不能再次打开另一个文件吗)

6 个解决方案

#1


在第二次打开之前调infile.clear()

#2


引用 1 楼 Mougou 的回复:
在第二次打开之前调infile.clear()

谢谢,修改后可以了。能解释一下这个函数的作用吗,还有我用close函数取消了关联,这样不行吗

#3


不太清楚,呵呵!关注!

#4


引用 2 楼 sysabod 的回复:
引用 1 楼 Mougou 的回复:
在第二次打开之前调infile.clear() 
 
谢谢,修改后可以了。能解释一下这个函数的作用吗,还有我用close函数取消了关联,这样不行吗

clear()函数的作用是清除文件流的标志(错误,到达末尾等),close()函数是关闭文件流,不影响流的标志。
第一次读文件时已经到达末尾,所以即使调了close()流标志仍在。
其实不用显示的调close()也可以,程序会自己调。但不建议这种写法。

#5


读写文件之后文件内部指针移到了最后
而且是一个无效区域

#6


讲的很好 很清楚 没有什么要说的了 顶一下

#1


在第二次打开之前调infile.clear()

#2


引用 1 楼 Mougou 的回复:
在第二次打开之前调infile.clear()

谢谢,修改后可以了。能解释一下这个函数的作用吗,还有我用close函数取消了关联,这样不行吗

#3


不太清楚,呵呵!关注!

#4


引用 2 楼 sysabod 的回复:
引用 1 楼 Mougou 的回复:
在第二次打开之前调infile.clear() 
 
谢谢,修改后可以了。能解释一下这个函数的作用吗,还有我用close函数取消了关联,这样不行吗

clear()函数的作用是清除文件流的标志(错误,到达末尾等),close()函数是关闭文件流,不影响流的标志。
第一次读文件时已经到达末尾,所以即使调了close()流标志仍在。
其实不用显示的调close()也可以,程序会自己调。但不建议这种写法。

#5


读写文件之后文件内部指针移到了最后
而且是一个无效区域

#6


讲的很好 很清楚 没有什么要说的了 顶一下