C++中ifstream使用笔记(一)(常用方法和注意事项)
2016-06-02 16:12
741 查看
ifstream简介: C++平台用来文件操作的库
std::ifstream
常用方法:
open(): ifstream关联文件的方式有两种,通过ifstream构造函数以及通过open来打开一个文件流
example:
close() // 关闭一个文件
get_line()
获取文件流中的一行数据,保存为一个c字符串形式(char *),结束标志是换行符 \n,n表示能写入s的最大字符数量(包括'\0')
delim参数:当匹配这个指定的字符的时候,结束数据的写入(这种情况不会将failbit位置为true,文件读取成功)
注意:
1. 如果读取的是一个空字串,而n大于0的话,会在s中自动写入一个字串结束标识符 '\0'
2. 如果读取的字符大于n或者等于n,但是这个时候并没有到达这行的结尾,也就是没有到换行符的位置,说明这行数据并不完整,这时候failbit会被置为true
eof()
检查eofbit是true还是false,以此来判断文件是否读取完毕(到文件的EOF位,算是end_of_file)
clear()
清楚错误信息,将goodbit设置为true
代码示例:
功能:将file1中的每一行单独读取并保存到string容器中
std::ifstream
常用方法:
open(): ifstream关联文件的方式有两种,通过ifstream构造函数以及通过open来打开一个文件流
example:
ifstream input_file(FILE_NAME); // OR ifstream input_file2; input_file2.open(FILE_NAME, ifstream::in); //ifstream::in 是打开的mode,有多种打开mode,见下文
mode | 描述 |
---|---|
in * | 读取文件 |
out | 写入模式,适用于output |
binary | 二进制模式 |
ate | 起点设置在文件的结尾 at the end of file |
app | 在文件的结尾进行文件的操作,写入. |
trunc | 放弃所有文件之前的内容(很危险!会清空文件内容). |
get_line()
istream& getline (char* s, streamsize n ); istream& getline (char* s, streamsize n, char delim );
获取文件流中的一行数据,保存为一个c字符串形式(char *),结束标志是换行符 \n,n表示能写入s的最大字符数量(包括'\0')
delim参数:当匹配这个指定的字符的时候,结束数据的写入(这种情况不会将failbit位置为true,文件读取成功)
注意:
1. 如果读取的是一个空字串,而n大于0的话,会在s中自动写入一个字串结束标识符 '\0'
2. 如果读取的字符大于n或者等于n,但是这个时候并没有到达这行的结尾,也就是没有到换行符的位置,说明这行数据并不完整,这时候failbit会被置为true
eof()
检查eofbit是true还是false,以此来判断文件是否读取完毕(到文件的EOF位,算是end_of_file)
clear()
清楚错误信息,将goodbit设置为true
iostate value (member constant) | indicates | functions to check state flags | ||||
---|---|---|---|---|---|---|
good() | eof() | fail() | bad() | rdstate() | ||
goodbit | No errors (zero value iostate) | true | false | false | false | goodbit |
eofbit | End-of-File reached on input operation | false | true | false | false | eofbit |
failbit | Logical error on i/o operation | false | false | true | false | failbit |
badbit | Read/writing error on i/o operation | false | false | true | true | badbit |
功能:将file1中的每一行单独读取并保存到string容器中
#include<fstream> #include<string> #include<vector> #include<iostream> #define FILE_NAME "file1" using namespace std; int main() { ifstream input_file; vector<string> ivec; string s; input_file.open(FILE_NAME, ifstream::in); while(!input_file.eof()) { getline(input_file, s); ivec.push_back(s); //cout << s.c_str() << endl; } vector<string>::const_iterator itor = ivec.begin(); for(itor;itor != ivec.end(); itor ++) { cout << *itor << endl; } return 0; }
相关文章推荐
- 第10章 C语言及程序设计提高例程-39 动态存储管理与动态数组的实现
- C/C++之define用法小结
- C++第七次实验-素数和回文
- [leetcode] 【链表】141. Linked List Cycle
- C语言inline详细讲解
- C++实验7—特殊三位数
- LeetCode 33. Search in Rotated Sorted Array
- C语言中空格,空字符,字符数组结束符的区别
- C语言之内存对齐浅谈
- Python与C++交互
- LeetCode 153. Find Minimum in Rotated Sorted Array
- 标准C++中的string类的用法总结
- c++ vector begin(),end(),rbegin(),rend()问题
- C语言实现字符串的查找和替换
- 第10周 C语言及程序设计提高例程-38 main函数的参数
- C++ 引用
- 链接库(血泪史)
- C++中auto型的详细解释
- 小范围排序(C++)
- C语言+SDL2 图形化编程