输入输出流.ppt
《输入输出流.ppt》由会员分享,可在线阅读,更多相关《输入输出流.ppt(146页珍藏版)》请在三一办公上搜索。
1、第10章 输入/输出流,I/O(输入/输出)流类库提供对象之间的数据交互服务 流类库预定义了一批流对象,连接常用的外部输入/输出设备 用户可以定义所需的I/O流对象,使用流库提供的一些功能,实现数据传输,流类库,流类库(stream library)是用继承方法建立的输入输出类库 流类库具有两个平行的基类:streambuf 和 ios 类,所有流类库均以两者之一作为基类 streambuf 类提供对缓冲区的低级操作设置缓冲区,对缓冲区指针进行操作向缓冲区存/取字符 ios 类及其派生类提供用户使用流类的接口,支持对streambuf 的缓冲区输入/输出的格式化或非格式化转换,streambu
2、f,1.streambuf,对缓冲区的低级操作,streambuf,1.streambuf,对缓冲区的低级操作,文件缓冲区管理,streambuf,1.streambuf,对缓冲区的低级操作,字符串缓冲区管理,streambuf,1.streambuf,对缓冲区的低级操作,标准I/O缓冲区管理,2.ios,提供用户接口,ios,iostream,2.ios,提供用户接口,ios,iostream,输入流,输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入
3、文件流,输入串流,输出串流,输出文件流,输入/输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出串流,标准输入/输出流,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出串流,标准输入/输出流,重载运算符“=”,重载运算符“=”,2.ios,提供用户接口,ios,iostream,输入流,输出流,输入文件流,输入串流,输出串流,输出文件流,输入/输出流,输入/输出文件流,输入/输出
4、串流,标准输入/输出流,重载运算符“=”,重载运算符“=”,11.5 文件处理,文件是由一系列数据构成的序列。例如,一组计算或处理结果可以构成一个文件。一个班所有学生的档案数据也可以构成一个文件。每个文件的内容都保存在外存储器中,每个文件都有一个名字,这个名字用标识符来表示。把数据存放在外存储器是以文件的方式进行,从外存储器把数据取出来也以文件的方式进行。在C+中,必须使用文件来解决数据的存储问题。,C+语言系统把文件看成无结构的字节流。根据文件中数据的编码方式可以把文件分为文本文件和二进制文件。根据文件中数据的存取方式可以把文件分为顺序文件和随机文件。在C+中,要进行数据的存取需要使用三个类
5、:文件输入流类ifstream、文件输出流类ofstream 和文件输入输出流类fstream。文件输入流类ifstream:提取文件中的数据到内存。文件输出流类ofstream:把内存中的数据插入到文件。文件输入输出流类fstream:上述两种功能都有。,11.5.1 文件和流,文件字节序号,文件结束符,文件长度=n,11.5.1 文件和流,文件指针,11.5.1 文件和流,文件结束,11.5.1 文件和流,文件中字节存放的都是数据的编码,这些编码可以是各种信息的编码。应用程序对字节序列可以作出各种类型数据或其它信息的解释。如果文件中的每一个字节存放的是ASC码,则每个字节表示一个字符。以A
6、SC码方式存放数据的文件称为文本文件。文本文件是一种顺序文件。在文本文件中,需要使用一个表示文件结束的标识常量EOF,它在iostream中定义,值为26(0 x1A)。关闭文件后,该字符被自动添加到文件的尾部。,以二进制代码方式存放数据的文件称为二进制文件。二进制文件是一种随机文件。当把内存中的数据存放到二进制文件时,C+把数据转换成二进制代码写到二进制文件中去。当从二进制文件中取数据时,C+把文件中的字节流解释为各种类型数据读出来存放到内存。,-内存-,ifstream,ofstream,读文件,写文件,11.5.2 打开和关闭文件,文件操作的基本步骤:1.打开文件2.读/写文件3.关闭文
7、件,1.打开文件,包括建立文件流对象;调用open()函数连接外部文件。打开文件有两种方法:(1)首先建立流对象,然后调用open()函数连接外部文件流类 对象名;对象名.open(文件名,方式);,ifstream、ofstream 或 fstream,例如:打开一个已有文件datafile.dat,准备读:ifstream infile;/建立输入文件流对象 infile.open(datafile.dat,ios:in);/连接文件,指定打开方式 打开(创建)一个文件newfile.dat,准备写:ofstream outfile;/建立输出文件流对象 outfile.open(d:ne
8、wfile.dat,ios:out);/连接文件,指定打开方式,(2)调用流类带参数的构造函数,建立流对象的同时连接外部文件流类 对象名(文件名,方式);,ifstream、ofstream 或 fstream,例如:ifstream infile(datafile.dat,ios:in);ofstream outfile(d:newfile.dat,ios:out);fstream rwfile(myfile.dat,ios:in|ios:out);,用或运算符“|”连接两个表示打开方式的标识常量,2.关闭文件,例如:ofstream ofile;/创建输出文件流 ofile.open(my
9、file1,ios:out);/ofile流与文件“myfile1”相关联/访问文件“myfile1”ofile.close();/关闭文件“myfile1”ofile.open(myfile2,ios:out);/重用ofile流,关闭文件操作的作用是把缓冲区数据完整地写入文件,添加文件结束标志,切断流对象和外部文件的连接。关闭文件要使用流类的成员函数close()。当一个流对象的生存期结束,系统也会自动关闭文件。,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,o
10、pen()和 close()函数应用,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,#include int main()ofstream ost
11、;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,#include int main()ofstream ost;ost.open(a:
12、my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,#include int
13、main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,/向预定义流插入数据,#include int main()ofstream ost;ost.open(a:my1.dat,ios:out);ost n d;cout n endl d endl;,open()和 close()函数应用,/创建输出流对象,/建立文件关联,缺省为文本模式,
14、/向流插入数据,/关闭文件,/创建输入流对象并建立关联,/从流提取数据,/向预定义流插入数据,11.5.3 文本文件,把描述某种信息的数据组织成一个整体,这个整体称为一个记录。记录是由一个或若干个数据构成。在把一些相关数据写到文本文件时,可以把这些相关数据组织成一个一个记录写到文本文件中。为了便于标识,每个记录的后面增加一个换行符,作为记录之间的分隔。数据之间可以用空白符、制表符、换行符等来分隔。文本文件可以看成是由若干个记录构成,每个记录占一行,每行后面有一个换行符。,0 1 2 3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,0 1 2
15、3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,0 1 2 3 4 5,ifstream fin,读文件,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,b 0X004e,0 1 2 3 4 5,2 4 3 7 8,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cend
16、l;,ofstream fout,c 0X0141,2 4 3 7 8,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,c=,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,
17、b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,3 2 1,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X0141,2 4 3 7 8,写文件,c=,3 2 1,endl,n,0 1 2 3 4 5,int a,b;fin a b;,a 0X00f3,b 0X004e,int c;c=a*b;fout c=cendl;,ofstream fout,c 0X01
18、41,2 4 3 7 8,c=,3 2 1,n,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.3456789
19、0 endl;ost.close();,使用格式控制建立的文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)
20、12.34567890 endl;ost.close();,使用格式控制建立的文本文件,建立输出文件流对象,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)set
21、precision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,默认方式打开文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)seti
22、osflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,插入字符串,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a endl;ost resetiosfla
23、gs(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,把整型数转换成字符串,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setiosflags(ios:left)setfill(#)setw(10)a
24、 endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,使用格式控制建立的文本文件,以指定格式插入数据,使用格式控制建立的文本文件,#include#include int main()ofstream ost;ost.open(a:my2.dat);ost 1234567890 endl;int a=123;ost a endl;ost setw(10)a endl;ost resetiosflags(ios:right)setios
25、flags(ios:left)setfill(#)setw(10)a endl;ost resetiosflags(ios:left)setiosflags(ios:right)setprecision(5)setw(10)12.34567890 endl;ost.close();,#include int main()ofstream out(a:test);if(!out)cout cannot open file.;return;out 10 123.45;out nThis is a short text file.;out.close();,把一个整数、一个浮点数和一个串写到文件 a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 输入输出
链接地址:https://www.31ppt.com/p-5377241.html