C/C++教程

C++的文件操作

本文主要是介绍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函数的参数含义相同
这篇关于C++的文件操作的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!