用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都这样
...全文
316 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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();

都是没必要的

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧