当前位置:首页 > 第10章 C++流与文件操作
第10章 C++流与文件操作
主讲内容
10.1 C++流的概念
?C++语言中“流”是指数据的流动。
?“流”既可以表示数据从内存传送到某个载体或设备中,即输出流;也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。 ?数据的输入和输出(简称为I/O)包括以下两方面:
?(1) 标准的输入输出(简称标准 I/0), 即从键盘输入数据,从屏幕输出数据。 ?(2) 文件的输入输出(简称文件 I/0),即从存储介质上的文件输入数据,然后将结果输出到外存储介质 10.2.1 C++中的I/O流库 ?1. I/0 库中常见的流类有:
?(1)ios: 为根基类,它直接派生四个类:输入流类istream、输出流类ostream、文件流基类fstreambase和字符串流基类strstreambase。 ?(2)istream: 通用输入流类 , 支持输入操作。同时继承了输入流类和文件流基类; ?(3)ostream: 通用输出流类 ,同时继承了输出流类和文件流基类;
?(4)iostream: 通用输入输出流类 , 由类 istream 和类 ostream 派生 , 支持输入输出操作。
?(5)ifstream: 输入文件流类 , 由类 istream 所派生 , 支持输入文件操作 ?(6) ofstream: 输出文件流类 , 由 ostream 所派生 , 支持输出文件操作
?(7)fstream: 输入输出文件流类 ,由类 iostream 所派生 , 支持输入输出文件操作。
10.2.1 C++中的I/O流库
? I/0 库常用的流类继承关系如图所示
10.2.2 标准输入输出流对象
?1.输入流对象
?在 C++ 语言中可以有 3 种输入流对象的操作方式:
?(1)cin是类istream的对象,用于从标准输入设备获取数据,使用运算符“>>”
将输入的数据传送给程序中的变量。“cin>>”除可以输入数据外,也可以输入字符; 10.2.2 标准输入输出流对象
?(2)用get()函数输入单个字符,一般的使用方式为:
输入流对象.get();
?该函数返回输入的字符,若遇到输入流中的结束符,则函数返回文件结束标志
EOF(End of File)。
?(3)用getline()函数读入字符串,一般使用格式为:
(字输入流对象.getline符指针,字符个数n) 10.2.2 标准输入输出流对象
?【例10.2】用getline()输入字符串应用举例
?#include
?{ char ch1[10];
? cout<<\从键盘输入一个少于10个字符的字符串:\? cin.getline(ch1,10); ? cout< ?程序运行后屏幕显示:从键盘输入一个少于10个字符的字符串: ?从键盘输入如一行字符:I Love China! ?则运行结果为:I Love Ch 10.2.2 标准输入输出流对象 ?2. 输出流对象 ?在 C++ 语言中提供了2种输出流对象的操作方式: ?(1)cout是输出流类ostream的对象,输出结果流向标准的输出设备显示器。 10.2.2 标准输入输出流对象 ?常用的输出格式状态: 10.2.2 标准输入输出流对象 ?常用输出流控制符 10.2.2 标准输入输出流对象 ?ios 类提供公有的成员函数对流的状态进行检测和输入输出格式设置等,下表给出 了每个成员函数的格式和功能说明。 10.2.2 标准输入输出流对象 ?(2)用输出流类成员函数 put()输出字符 ?C++中如果想输出单个字符,除可以使用“cout<<”语句外,还可以使用输出流函 数put(),其一般格式为: ?输出流对象.put(ch); ?其中ch为要输出的字符。 ?【例10.5】用输出流成员函数put()输出单个字符 ?#include ?{ char str[]=\?for(int i=0;i ?} ?程序运行结果为: ?I Love China! 10.3 文件操作 ?文件是一组相关数据的有序集合。 ?从用户角度看,文件可分为普通文件和设备文件两种。 ?普通文件是指存储在磁盘或外部存储介质上的数据文件,可以是源文件、目标文件、 可执行文件等。 ?设备文件是指与主机相连的各种外部设备,如显示器、打印机、键盘等。 10.3 文件操作 ?C++对文件流分为3类:输入流、输出流以及输入/输出流: ?(1)ifstream流类,是从istream类派生的,用于外存文件的输入操作; ?(2)ofstream 流类,是从ostream类派生的,用于外存文件的输出操作; ?(3)fstream 流类,是从iostream类派生的,用于外存文件的输入和输出操作。 ?定义流文件对象的一般格式为 fstream 流对象名; 10.3.1 文件的打开与关闭 ?1.打开文件 ?文件在进行读写操作前,应先打开,文件打开方式的一般格式为: ?文件流对象名.open(“文件名”,文件打开模式) ?文件名可包含路径说明。 ?文件打开模式 : 10.3.1 文件的打开与关闭 ?2.关闭文件 ? 当对一个文件的读写操作完成后,为了保证数据安全,切断文件与流的联系,应 及时关闭文件。 ?关闭文件的一般格式为: 流对象名.close() 10.3.2 文本文件读写操作 ?文本文件的读写操作分为顺序读写和随机读写两种。 ?1. 顺序读写文件 ?顺序读写是指从文件头一直读或写到文件尾,通常采用get(),getline(),put(), read()或write()等函数来完成对文件的读写操作。 10.3.2 文本文件读写操作 ?【例10.7】从键盘上输入若干行文本字符到dat文件中,直到按下Ctrl+z组合键为止(此组合键代表文件结束符EOF) ?#include ?#include ?ofstream f2( \定义f2为流对象名,并在当前目录下建立(默认 打开)一个wr2的文本文件 10.3.2 文本文件读写操作 ?if(!f2){cerr<<\?exit(1);} ?ch=cin.get(); //从cin字符中提取一个字符到ch中 ?while(ch!=EOF){ ? f2.put(ch); //把ch字符写入到f2流中 ? ch=cin.get();} ?f2.close(); ?} ?此程序运行后,将在当前目录下建立了一个wr2.txt的文本文件。 10.3.3 二进制文件的读写操作 ?对二进制文件的读写可采用两种方法:一种是使用 read()和write()。 get()和put();另一种是使用 ?(1)用read()和write()读写二进制文件 ?这两个成员函数的一般格式为: 文件流对象.read(字符指针buffer , 长度len); 文件流对象.write(字符指针buffer , 长度len); 10.3.3 二进制文件的读写操作 ?2、用put()和get()读写二进制文件 ?【例10.11】将一字符串写入到二进制文件mybinary.dat中,然后再依次读取二进制文件中的字符,并显示在屏幕上,最后输出数字字符的个数。 ?#include ?#include ?f1.open(\10.3.3 二进制文件的读写操作 ?if(!f1) ?{ cout<<\? exit(1);
共分享92篇相关文档