C++逐行读取文本文件的正确做法
2015-08-18 18:30
239 查看
作者:朱金灿
来源:http://blog.csdn.net/clever101
之前写了一个分析huson日志的控制台程序,其中涉及到C++逐行读取文本文件的做法,代码是这样写的:
开始这段代码运行是没有问题的,但后来运行居然出现了死循环,上网查了下资料,发现原因是:当缓冲区不够大的时候,getline函数也会对缓冲区输入数据,但同时也会把ifstream的状态位failbit设置了,于是fail函数会返回true。于是上述代码会嵌入死循环,由于处于fail状态下的ifstream,其getline函数不会再读入任何数据,因此后续的getline调用没有效果,并且fail函数一直返回true。
正确的做法是:
参考文献:
1. getline的获取ifstream的数据
来源:http://blog.csdn.net/clever101
之前写了一个分析huson日志的控制台程序,其中涉及到C++逐行读取文本文件的做法,代码是这样写的:
ifstream file; file.open(“C:\\hudson.log”); char szbuff[1024] = {0}; while(!file.eof()) { file.getline(szbuff,1024); }
开始这段代码运行是没有问题的,但后来运行居然出现了死循环,上网查了下资料,发现原因是:当缓冲区不够大的时候,getline函数也会对缓冲区输入数据,但同时也会把ifstream的状态位failbit设置了,于是fail函数会返回true。于是上述代码会嵌入死循环,由于处于fail状态下的ifstream,其getline函数不会再读入任何数据,因此后续的getline调用没有效果,并且fail函数一直返回true。
正确的做法是:
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { char *filePath = "E:\\test.txt"; ifstream file; file.open(filePath,ios::in); if(!file.is_open()) return 0; std::string strLine; while(getline(file,strLine)) { if(strLine.empty()) continue; cout<<strLine <<endl; } }
参考文献:
1. getline的获取ifstream的数据
相关文章推荐
- C++逐行读取文本文件的正确做法
- c语言发挥帕斯卡三角
- C++ Primer : 第十章 : 泛型算法 之 只读、写和排序算法
- C语言 输入年月日判断是第几天
- C/C++程序题之三天打渔两天晒网
- 《C/C++学习指南》 - 关于本书
- C++:实现split分割字符串 - 改进
- C++出错提示英汉对照表
- Effective C++ 条款7 为多态基类声明virtual析构函数
- iOS基础_C语言第一讲
- 对于VS中一些较严谨的(_s)函数如strcpy_s的第二个参数的问题
- 黑马程序员——ios基础---C语言:字符串、指针
- C++:实现split分割字符串
- Effective C++ 条款6 若不想使用编译器自动生成的函数,就该明确拒绝
- c++32位系统和64位系统中类型的字节区别
- 建立二叉树和输出
- java与C++在数组处理上的区别
- 给rust链接windows下的资源或者c/c++的.o文件
- C/C++ Volatile关键词深度剖析
- 2-06. 数列求和(20)