用ifstream打开一个不存在文件导致fail.在clear和close之后open一个存在的文件,为何还是fail?

97jy059 2004-05-07 12:29:42
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
string fn;
cout<<"Enter file name:";
cin>>fn;
ifstream READ(fn.c_str());
if(READ.fail()){
cerr<<"open "<<fn<<" failed.try again\n";
READ.clear();
READ.close();
cout<<"Enter file name:";
cin>>fn;
READ.open(fn.c_str());
if(READ.good()) cout<<"good\n";
else cout<<"unfortunately\n";
}
}

E:\TEMP>test
Enter file name:vc7.txt

E:\TEMP>test
Enter file name:aaaaa
open aaaaa failed.try again
Enter file name:vc7.txt
unfortunately

borland和.net都这样
...全文
185 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pacman2000 2004-05-08
一个没打开的文件,对它close(),仍然是fail啊。
  • 打赏
  • 举报
回复
97jy059 2004-05-08
rorot() :你的方法对的。不过为什么不要执行close呢?
  • 打赏
  • 举报
回复
rorot 2004-05-07
READ.clear();
//READ.close(); 把这里得READ.close()去掉
  • 打赏
  • 举报
回复
xiaonian_3654 2004-05-07
打开模式不对!
  • 打赏
  • 举报
回复
ohokay 2004-05-07
按理说不应该出现你所说的问题,除非你输入的文件名不是和源程序在同一目录下,这样的话你最好输入完整路径就ok了
  • 打赏
  • 举报
回复
RookieStar 2004-05-07
There is something wrong with your control logic, recommend like the following:

if (READ.fail())
{
cerr<<"open "<<fn<<" failed.try again\n";
exit(1);
}
else
{
// do your operations here: such as clear()
}

READ.close(); // close your opened file at the end

// This is a common way of file manipulation.
  • 打赏
  • 举报
回复
cngdzhang 2004-05-07
如果
READ.fail()
那么文件就根本没打开
后面的
READ.clear();
READ.close();

都是没必要的

  • 打赏
  • 举报
回复
相关推荐
发帖
工具平台和程序库
加入

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2004-05-07 12:29
社区公告
暂无公告