您当前的位置: 首页 >  c++

phymat.nico

暂无认证

  • 0浏览

    0关注

    1967博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++逐行读取文本文件的正确做法

phymat.nico 发布时间:2017-12-05 16:00:03 ,浏览量:0

作者:朱金灿

来源:http://blog.csdn.net/clever101

 

            之前写了一个分析huson日志的控制台程序,其中涉及到C++逐行读取文本文件的做法,代码是这样写的:

[cpp] view plain copy
  1. ifstream file;  
  2. file.open(“C:\\hudson.log”);  
  3. char szbuff[1024] = {0};  
  4. while(!file.eof())  
  5. {  
  6.         file.getline(szbuff,1024);  
  7. }  

        开始这段代码运行是没有问题的,但后来运行居然出现了死循环,上网查了下资料,发现原因是:当缓冲区不够大的时候,getline函数也会对缓冲区输入数据,但同时也会把ifstream的状态位failbit设置了,于是fail函数会返回true。于是上述代码会嵌入死循环,由于处于fail状态下的ifstream,其getline函数不会再读入任何数据,因此后续的getline调用没有效果,并且fail函数一直返回true。

       

       正确的做法是:

[cpp] view plain copy
  1. #include   
  2. #include   
  3. #include   
  4.   
  5. using namespace std;  
  6.   
  7. int main()  
  8. {  
  9.   char *filePath = "E:\\test.txt";  
  10.   ifstream file;  
  11.   file.open(filePath,ios::in);  
  12.   
  13.   if(!file.is_open())  
  14.   
  15.         return 0;  
  16.   
  17.       
  18.        std::string strLine;  
  19.        while(getline(file,strLine))  
  20.        {  
  21.   
  22.             if(strLine.empty())  
  23.                 continue;  
  24.   
  25.             cout
关注
打赏
1659628745
查看更多评论
立即登录/注册

微信扫码登录

0.0435s