为什么这个fstream里面的几个操作会让我进入死循环?
各位大哥,代码如下,第一次运行的时候也就是d盘没有test.txt文件的时候就会进死循环,但是建立了空文件之后就不会了,照理说不应该是一样的么,小弟非常不解
#include <afx.h>
#include <fstream>
#include <iostream>
using namespace std;
bool UserInfoFind(CString fn,CString cd,CString &un,CString &ui,CString &gi)
{
bool find=false;
fstream fs;
fs.open(fn,ios_base::in | ios_base::out);
if (!fs)
{
fs.close();
fs.open(fn,ios_base::in | ios_base::out | ios_base::trunc);
fs.close();
fs.open(fn,ios_base::in |ios_base::out);
}
char cLine[40];
while (!fs.eof())
{
fs.getline(cLine,40);
int i=fs.eof();
cout < < i < < endl;
CString cdtmp=CString(cLine,cd.GetLength());
if (cdtmp==cd)
{
find=true;
break;
}
}
fs.close();
if (find)
{
}
else
{
cout < <_T( "bbb ");
}
return true;
}
void main()
{
CString fn= "d:\\test.txt ";
CString cd,un,ui,gi;
cd=_T( "aaa ");
UserInfoFind(fn,cd,un,ui,gi);
}
[解决办法]
文件不存在时,处理错误
if (!fs)
{
fs.close(); 空文件
fs.open(fn,ios_base::in | ios_base::out | ios_base::trunc); 还是空文件
fs.close(); 还是空文件
fs.open(fn,ios_base::in |ios_base::out);还是空文件
}
while (!fs.eof()) 空文件 的eof 操作 永远是 0
当然死循环,
if (!fs)
{ 判断是空文件后,应该创建一个文件
[解决办法]
给我 team 的要求是,举凡 I/O 操作,一律检查返回。