C++的文件操作
作者:互联网
一、C++文件的基础知识
- C++程序要处理文件,首先要包含fstream头文件
- fstream.h提供三种流对象类型:ofstream、ifstream、fstream
- C++程序处理文件之前,必须定义流对象,通过流对象操作文件
- ofstream f1; 只输出文件流类型
- ifstream f1; 只输入文件流类型
- fstream f1; 输入输出文件流
二、打开和关闭文件
2.1 打开文件
- 打开文件可以通过流对象的函数成员open进行
- ofstream f1; f1.open("data.txt");
- ifstream f1; f1.open("data.txt");
- fstream f1; f1.open("data.txt", ios::out | ios::in);
- 当使用fstream对象时,open函数还需要有一个参数,这个参数就是文件的访问标志,也称为文件的打开模式,常用的如下
- ios::app 以追加的方式打开文件
- ios::binary 以二进制方式打开文件,缺省的方式是文本方式
- ios::in 输入模式,从文件中读取数据,如果文件不存在,open函数将失败
- ios::out 输出模式,向文件写数据。默认情况下,如果文件已存在,文件的内容将被刷新
- 打开模式可以通过 | 符号连接使用
- 比如只能向文件的尾部写数据,ios::out | ios::app
- 除了可以采用open函数打开文件以外,还可以在定义流对象时打开文件
- 例如,fstream f1("data.txt", ios::in | ios::out)(以读写模式打开文件)
- 测试文件打开是否失败的方法是采用fail函数
- 当打开文件失败时,fail函数成员将返回true
- 例如,if(f1.fail()) {cout<<"file open failed!\n"; exit(0);}
2.2 关闭文件
- 打开的文件使用完成后一定要关闭
- fstream提供了成员函数close()来完成此操作,如:f1.close();就把f1相连的文件关闭
三、读写文件
3.1 采用流操作符>>和<<读写文件
- 将数据写到与流对象关联的文件中,类似于采用cout写到屏幕上
- cout格式化输出数据的方法也适用于写文件操作
- 通过操作符>>从文件中读取数据时,是通过空白字符(空格、跳格、换行)进行区分数据的
- 可以通过函数成员eof()检测“读指针”是否已经到达文件的尾部(文件最后一个数据的后面),若是,则eof函数返回true
- 例如,while(! f1.eof()) f1>>var;
3.2 采用函数成员读写文件
- 流对象的函数成员getline,一次读取文件中的一行字符,包含空白字符,例如:f1.getline(str, 81, '\n')
- str是一个字符数组名,从文件中读取的数据将存储在str中
- 81表示从文件中最多能读取80个字符
- '\n'是界符,如果在读满最大字符个数之前遇到了界符,那么将停止读取,这个参数可选,如省略则默认为'\n'
- 上述例子,如果读满了80个字符或是遇到了'\n'符号,都将停止读取,最后将读取到的字符串存到str中
- 流对象的函数成员get,从文件中一次读取一个字符,例如:f1.get(ch)
- ch是一个字符变量,从文件中读取的字符存储在ch中
- get函数能读取任何一个字符,包括空白字符
- 流对象的函数成员put,向文件写字符,例如:f1.put(ch)
- ch是一个字符变量,将ch的内容写到f1关联的文件中
- put函数能写任何一个字符,包括空白字符
3.3 二进制文件的操作(上述全是文本文件)
- 创建二进制文件首先要以二进制方式打开文件,默认情况下,文件是以文本模式打开
- 创建二进制文件的第二步是采用write函数成员写数据
- write函数特别适合一次写一个数据块(如数组、结构体或对象)
- 例如:f1.write((char *)buffer, sizeof(buffer));
- write第一个参数是内存区的开始地址,要求是char*指针,所以大多数时候需要类型转换
- write第二个参数是以字节为单位的数据项大小
- read函数可以从文件中按二进制方式读取数据
- 例如:f1.read((char *)buffer, sizeof(buffer));
- read函数和write函数的参数含义相同
标签:f1,函数,文件,fstream,ios,C++,字符,操作 来源: https://www.cnblogs.com/my16/p/15362900.html