头文件
- ofstream //文件写操作 内存写入存储设备
- ifstream //文件读操作,存储设备读区到内存中
- fstream //读写操作,对打开的文件可进行读写操作
打开文件
成员函数open()实现打开文件的操作,从而将数据流和文件进行关联,通过ofstream,ifstream,fstream对象进行对文件的读写操作
如果调用open函数时省略mode模式参数,则默认按照可读可写(ios_base:in | ios_base::out)的方式打开
voidopen( const char * filename,ios_base::openmode mode = ios_base::in | ios_base::out );
| ios::in | 为输入(读)而打开文件 |
| ios::out | 为输出(写)而打开文件 |
| ios::ate | 初始位置:文件尾 |
| ios::app | 所有输出附加在文件末尾 |
| ios::trunc | 如果文件已存在则先删除该文件 |
| ios::binary | 二进制方式 |
判断文件是否打开成功:is_open
- is_open函数是用来判断调用open后文件是否打开成功的,不需要传递参数;
- is_open函数的返回值是bool类型,如果文件打开成功则返回true,打开失败则返回flase;
错误判断方法
- good() 如果文件打开成功
- bad() 打开文件时发生错误
- eof() 到达文件尾
读取内容
//前情提要(需要的变量)
istream ifs(s);
string s;
char c;
char tmp[1024];
逐词读取
//第一种:
string tmp;
while (ifs >> tmp)
{
cout << tmp << endl;
}
//这种方法会从ifs中逐个单词读取(也就是遇到空格、换行时会停止)
逐行读取
// 第二种:getline()
while (getline(ifs, s)) //1024是单次读取的最大字符数量
{
cout << s << endl;
}
// 可以和sstream结合使用
// 或者:
while (ifs.getline(tmp, 1024)) //注意上面的可以对string使用, 而这个是char*
{
cout << tmp << endl;
}
逐字符读取
//第三种:get()
while( (c = ifs.get()) != EOF)
{
cout << c; //一个字符一个字符输出
}
//不推荐,效率低