《第9章 C++语言的输入输出流库.ppt》由会员分享,可在线阅读,更多相关《第9章 C++语言的输入输出流库.ppt(53页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、9.19.1屏屏幕幕输输出出9.29.2键键盘盘输输入入9.39.3格格式式化化输输入入和和输输出出9.59.5磁磁 盘盘 文文 件件 的的输输 入入 和和 输输 出出第9章 C+语言的I/O流库9.49.4磁磁盘盘文文件件的的操操作作数据的传送被看成像流水一样,从一处流向另一数据的传送被看成像流水一样,从一处流向另一处,数据的传递被称为数据流。处,数据的传递被称为数据流。数据流中流动的字节序列。数据流中流动的字节序列。数据流按其流向可分为数据流按其流向可分为:输入流输入流 指的是字节流从输入设备流向内存。指的是字节流从输入设备流向内存。输出流输出流 指的是字节流从内存流向输出设备指的是字节流
2、从内存流向输出设备。输入流和输出流都是带有内存缓冲区的,用来存输入流和输出流都是带有内存缓冲区的,用来存放流中的数据。流是与内存缓冲区相对应的。放流中的数据。流是与内存缓冲区相对应的。第9章 C+语言的I/O流第9章 C+语言的I/O流n数据流分类:数据流分类:n对系统指定的标准设备的输入和输出。对系统指定的标准设备的输入和输出。n以外存磁盘文件为对象进行输入和输出。以外存磁盘文件为对象进行输入和输出。n对内存中指定的空间进行输入和输出。对内存中指定的空间进行输入和输出。n重要的输入流类:重要的输入流类:nistreamifstreamnistrstreamn重要的输出流类:重要的输出流类:n
3、ostreamnofstreamnostrstream1 1通用通用I/OI/O流类库流类库 使用使用这这些功能些功能时应时应包含包含头头文件文件iostream.hiostream.h。iosistreamostreamiostream提供流状态设置功能提供流状态设置功能提供从输入提供从输入流提取数据流提取数据的操作的操作第9章 C+语言的I/O流2 2文件文件I/OI/O流类库流类库 使用有关文件使用有关文件读读写操作写操作时时,应应包含包含fstream.hfstream.h文件。文件。iosistreamostreamiostreamfstreambaseifstreamofstrea
4、mfstreamC+的I/O对C的发展类型安全和可扩展性n在在C C语言中,用语言中,用printfprintf和和scanfscanf进行输入输出,往进行输入输出,往往不能保证所输入输出的数据是可靠的、安全的。往不能保证所输入输出的数据是可靠的、安全的。n在在C+C+的输入输出中,编译系统对数据类型进的输入输出中,编译系统对数据类型进行严格的检查,凡是类型不正确的数据都不可能行严格的检查,凡是类型不正确的数据都不可能通过编译。因此通过编译。因此C+C+的的I/OI/O操作是类型安全的。操作是类型安全的。nC+C+的的I/OI/O操作是可扩展的,不仅可以用来输入操作是可扩展的,不仅可以用来输入
5、输出标准类型的数据,也可以用于用户自定义类输出标准类型的数据,也可以用于用户自定义类型的数据。型的数据。在在iostreamiostream头文件定义了头文件定义了4 4种流对象种流对象cincin是是istreamistream类的对象,用来处理标准输入,即键盘输入。类的对象,用来处理标准输入,即键盘输入。coutcout是是ostreamostream类的对象,用来处理标准输出,即屏幕输类的对象,用来处理标准输出,即屏幕输出。出。CerrCerr是是ostreamostream类的对象,用来处理标准错误信息,类的对象,用来处理标准错误信息,没有没有缓冲,发送给它的内容立即被输出。缓冲,发送
6、给它的内容立即被输出。clogclog是是ostreamostream类的对象,用来处理输出信息,它提供打类的对象,用来处理输出信息,它提供打印机输出。印机输出。第9章 C+语言的I/O流9.1.1 9.1.1 使用预定义的插入符使用预定义的插入符 这是一种最简单的,也是最常用的方式。这是一种最简单的,也是最常用的方式。格式如下:格式如下:coutcout n“”在在iostream头文件中对它们进行了重载。如头文件中对它们进行了重载。如nostream operator (int);nostream operator (float);nostream operator (char);nost
7、ream operator (char*);9 9.1.1 屏幕输出屏幕输出例例 分析下列程序的输出结果。分析下列程序的输出结果。程序内容如下:程序内容如下:#include#include void main()coutThis is a string.endl;coutstrlen(This is a string.)endl;例例 分析下列程序的输出结果。分析下列程序的输出结果。#include void fun(int,int);void main()fun(20,0);fun(205,5);void fun(int i,int j)if(j=0)cerrzero encountere
8、d.n;else couti/jendl;把一个字符写到输出流中。把一个字符写到输出流中。如如:cout.put(acout.put(a););参数可以是字符或参数可以是字符或ASCIIASCII码码 cout.put(65+32)cout.put(65+32);连续调用连续调用putput函数函数cout.put(71).put(79).pu(79).put(68).put(n);cout.put(71).put(79).pu(79).put(68).put(n);GOOD9.1.2 9.1.2 使用成员函数使用成员函数put()put()输出一个字符输出一个字符例例例例 分析下列程序的输出
9、结果。分析下列程序的输出结果。分析下列程序的输出结果。分析下列程序的输出结果。#include#include void main()void main()coutcoutHELLOHELLOendlendl;cout.put(H).put(E).put(L).put(L).put(O).put(ncout.put(H).put(E).put(L).put(L).put(O).put(n););char c1=A,c2=B;char c1=A,c2=B;intint a=65;a=65;cout.put(c1).put(c2)cout.put(c1).put(c2)endlendl;cout.
10、put(char(a).put(char(66)cout.put(char(a).put(char(66)endlendl;格式如下:格式如下:cout.writecout.write(const char*(const char*strstr,intint n n)#include#include void print(char*s)cout.write(s,strlen(s).put(n);cout.write(s,6)endl;void main()char*str=I love China.;coutThe string is str 从从键盘键盘上上输输入数据是入数据是带缓带缓冲区的
11、,冲区的,输输入完数据按入完数据按回回车键时车键时才形成才形成输输入流。入流。输输入流中数据入流中数据项项的默的默认认分隔符分隔符为为空格、空格、tab键、换键、换行符等行符等空白符。空白符。9 9.2.2 键盘输入键盘输入例例例例 分析下列程序的输出结果。分析下列程序的输出结果。分析下列程序的输出结果。分析下列程序的输出结果。#include#include void main()void main()intint i,ji,j;coutcoutEnter i j:;ij;ij;coutcoutcincinendlendl;coutcouti,ji,jendlendl;例例例例 使用提取符从
12、键盘上获取整数,判断该数是大于使用提取符从键盘上获取整数,判断该数是大于使用提取符从键盘上获取整数,判断该数是大于使用提取符从键盘上获取整数,判断该数是大于0 0、小于、小于、小于、小于0 0还是等于还是等于还是等于还是等于0 0,当输入非整数时退出程序。,当输入非整数时退出程序。,当输入非整数时退出程序。,当输入非整数时退出程序。#include#include void main()void main()intint n;n;coutcoutEnter a integer:;n)n)if(nif(n0)0)coutcout0n;0n;else else if(nif(n0)0)coutco
13、utn0n;n0n;else else coutcoutn=0n;n=0n;coutcoutno integer!n;no integer!n;格式如下:格式如下:char char istream:getistream:get()()#include void main()char ch;coutEnter charactors:;while(ch=in.get()!=EOF cout.put(ch);9.2.2 9.2.2 使用成员函数使用成员函数get()get()获取一个字符获取一个字符 格式如下:格式如下:cin.getline(charcin.getline(char*buf,in
14、tbuf,int n,charn,char delinedeline=n)=n)9.2.3 9.2.3 使用成员函数使用成员函数getlinegetline()()读取一行字符读取一行字符例例例例 分析下列程序的输出结果,该程序中使用了分析下列程序的输出结果,该程序中使用了分析下列程序的输出结果,该程序中使用了分析下列程序的输出结果,该程序中使用了getlinegetline()()函数。函数。函数。函数。#include#include void main()void main()char buf80;char buf80;intint lcnt(0),lmax(-1);lcnt(0),lm
15、ax(-1);coutcoutEnter lmaxlmax)lmaxlmax=count;=count;coutcoutLine#Line#lcntlcnt:count:countendlendl;cout.write(buf,count).put(n).put(ncout.write(buf,count).put(n).put(n););coutcoutLargest line:Largest line:lmaxlmaxendlendl;coutcoutTotal line:Total line:lcntlcntendlendl;格式如下:格式如下:cin.readcin.read(char
16、*(char*buf,intbuf,int n)n)#include void main()char buf80=;coutEnter:n;cin.read(buf,80);coutbufendl;9.2.4 9.2.4 使用成员函数使用成员函数read()read()读取若干字符读取若干字符9.3 格式化输入和输出n n使用流对象的成员函数n n使用控制符的方法1 1控制输入控制输入/输出格式的标志位输出格式的标志位 用来控制输入用来控制输入/输出格式的标志位如表输出格式的标志位如表 标标 志志 位位值值含含 义义输输入入/输输出出skipwsskipws0 x00010 x0001跳跳过输
17、过输入中的空白符入中的空白符I Ileftleft0 x00020 x0002输输出数据按出数据按输输出域左出域左对齐对齐O Orightright0 x00040 x0004输输出数据按出数据按输输出域右出域右对齐对齐O Ointernalinternal0 x00080 x0008数据的符号左数据的符号左对齐对齐,数据本身右,数据本身右对齐对齐,符号,符号和数据之和数据之间为间为填充符填充符O O9.4.1 使用流对象的成员函数进行格式输出使用流对象的成员函数进行格式输出表表 ios标标志位志位 标标 志志 位位值值含含 义义输输入入/输输出出decdec0 x00100 x0010转换转
18、换基数基数为为十十进进制形式制形式O Ooctoct0 x00200 x0020转换转换基数基数为为八八进进制形式制形式I/OI/Ohexhex0 x00400 x0040转换转换基数基数为为十六十六进进制形式制形式I/OI/Oshowbaseshowbase0 x00800 x0080输输出的数出的数值值数据前面数据前面带带有基数符号(有基数符号(0 0或或0 x0 x)I/OI/Oshowpointshowpoint0 x01000 x0100浮点数浮点数输输出出带带有小数点有小数点O Ouppercaseuppercase0 x02000 x0200用大写字母用大写字母输输出十六出十六进
19、进制数制数值值O Oshowposshowpos0 x04000 x0400正数前面正数前面带带有有“+”符号符号O Oscientificscientific0 x08000 x0800浮点数浮点数输输出采用科学表示法出采用科学表示法O Ofixedfixed0 x10000 x1000使用定点数形式表示浮点数使用定点数形式表示浮点数O Ounitbufunitbuf0 x20000 x2000完成完成输输出操作后立即刷新流的出操作后立即刷新流的缓缓冲区冲区O Ostdiostdio0 x40000 x4000完成完成输输出操作后刷新系出操作后刷新系统统的的stdout.stderrstdo
20、ut.stderrO O一些用来控制一些用来控制输输出格式的成出格式的成员员函数:函数:(1 1)设设置置标标志字的成志字的成员员函数函数long flags()long flags()该该函数返回当前函数返回当前标标志字。志字。long long flag(longflag(long)该该函数使用参数更新函数使用参数更新标标志字,并返回更新前的志字,并返回更新前的标标志字。志字。long long setf(longsetf(long setbitssetbits,long field),long field)该函数用来将该函数用来将field参数所指定的标志位清零,将参数所指定的标志位清零
21、,将setbits所指的标志位置所指的标志位置1,并返回设置前的标志字。,并返回设置前的标志字。2 2控制输出格式的成员函数控制输出格式的成员函数long long setf(longsetf(long)该该函数用来函数用来设设置参数的指定的那些置参数的指定的那些标标志志位,并返回更新前的位,并返回更新前的标标志字。志字。long long unsetf(longunsetf(long)该该函数用来清除参数所指定的那些函数用来清除参数所指定的那些标标志志位,并返回更新前的位,并返回更新前的标标志字。志字。1 1)设设置置输输出数据所占出数据所占宽宽度的成度的成员员函数函数intint widt
22、h()width()该该函数用来返回当前函数用来返回当前输输出的数据出的数据宽宽度。度。intint width(intwidth(int)该该函数用来用其参数函数用来用其参数设设置当前置当前输输出的数出的数据据宽宽度,并返回更新前的度,并返回更新前的宽宽度度值值。9.4.2 格式化输出2 2)设设置填充符的成置填充符的成员员函数函数char fill()char fill()该该函数用来返回当前所用的填充符。函数用来返回当前所用的填充符。char char fill(charfill(char)该该函数用来函数用来设设置当前的填充符置当前的填充符为为参数参数给给定的字符,并返回更新前的填充符
23、。定的字符,并返回更新前的填充符。9.4.2 格式化输出3 3)设设置浮点数置浮点数输输出精度的成出精度的成员员函数函数intint precision()precision()该该函数用来返回当前浮点数的有效数字的个数。浮点数的函数用来返回当前浮点数的有效数字的个数。浮点数的精度是用有效数字个数来表示的,其个数越大,表示精度精度是用有效数字个数来表示的,其个数越大,表示精度越高。越高。intint precision(intprecision(int)该该函数用来函数用来设设置当前浮点数置当前浮点数输输出出时时有效数字个数有效数字个数为该为该函数函数所指定的参数所指定的参数值值,并返回更新前
24、的,并返回更新前的值值。9.4.2 格式化输出 下面下面给给出在默出在默认认情况下的某些参数的情况下的某些参数的值值:数据数据输输出出宽宽度默度默认认情况下情况下为实际宽为实际宽度;度;默默认认情况下填空符情况下填空符为为空格符;空格符;单单精度浮点数最多提供精度浮点数最多提供7 7位有效数字,双精位有效数字,双精度浮点数最多提供度浮点数最多提供1515位有效数字,位有效数字,长长双精度浮点数双精度浮点数最多提供最多提供1919位有效数字。位有效数字。例例 分析下列程序的输出结果。分析下列程序的输出结果。#include void main()coutDEC:85endl;cout.setf(
25、ios:hex,ios:basefield);coutHEX:85endl;cout.setf(ios:showbase);coutHEX:85endl;cout.setf(ios:oct,ios:basefield);coutOCT:85endl;cout.setf(ios:dec,ios:basefield);coutDEC:85endl;#include#include void main()void main()coutcout1234567890123456789012345678901234567890endlendl;intint i=12345;i=12345;coutcout
26、iiendlendl;cout.width(10);cout.width(10);coutcoutiiendlendl;cout.width(10);cout.width(10);cout.fillcout.fill(*);(*);cout.setf(ios:left,ios:adjustfieldcout.setf(ios:left,ios:adjustfield););coutcoutiiendlendl;cout.setf(ios:right,ios:adjustfieldcout.setf(ios:right,ios:adjustfield););cout.precision(6);c
27、out.precision(6);double d=123.456789;double d=123.456789;coutcoutddendlendl;cout.setf(ios:scientific,ios:floatfieldcout.setf(ios:scientific,ios:floatfield););coutcoutddendlendl;coutcoutwidth:width:cout.widthcout.width()()endlendl;使用控制符使用控制符时时需包含需包含iomanip.hiomanip.h头头文件。文件。控制符可以直接插入到控制符可以直接插入到输输出流中。
28、出流中。9.4.3 9.4.3 操作子操作子表表10.210.2 流流类库类库所定所定义义的操作子的操作子 操作子名操作子名含含 义义输输入入/输输出出decdec数数值值数据采用十数据采用十进进制表示制表示I/OI/Ohexhex数数值值数据采用十六数据采用十六进进制表示制表示I/OI/Ooctoct数数值值数据采用八数据采用八进进制表示制表示I/OI/Osetbase(intsetbase(int n)n)设设置数制置数制转换转换基数基数为为n n(n n为为0 0,8 8,1010,1616)0 0表示使用默表示使用默认认基数基数I/OI/Owsws提取空白符提取空白符I Iendsen
29、ds插入空字符插入空字符O Oflushflush刷新与流相关刷新与流相关联联的的缓缓冲区冲区O Oresetiosflags(longresetiosflags(long)清除参数所指定的清除参数所指定的标标志位志位I/OI/Osetiosflags(longsetiosflags(long)设设置参数所指定的置参数所指定的标标志位志位I/OI/Osetfill(intsetfill(int)设设置填充字符置填充字符O Osetprecision(intsetprecision(int)设设置浮点数置浮点数输输出的有效数字个数出的有效数字个数O Osetw(intsetw(int)设设置置输
30、输出数据出数据项项的域的域宽宽O O#include#include#include#include void main()void main()coutcout1234567890123456789012345678901234567890endlendl;intint i=12345;i=12345;coutcoutiiendlendl;coutcoutsetw(10)isetw(10)iendlendl;coutcoutresetiosflags(ios:rightresetiosflags(ios:right)setiosflags(ios:leftsetiosflags(ios:le
31、ft)setfillsetfill(*)setw(10)i(*)setw(10)iendlendl;double d=123.456789;double d=123.456789;coutcoutsetfillsetfill()setprecision(6)setw(10)d()setprecision(6)setw(10)dendlendl;cout.setf(ios:scientific,ios:floatfieldcout.setf(ios:scientific,ios:floatfield););coutcoutddendlendl;coutcoutwidth:width:cout.w
32、idthcout.width()()endlendl;9.5.1 9.5.1 打开文件和关闭文件操作打开文件和关闭文件操作1 1打开文件打开文件打开文件通常分打开文件通常分为为两步:两步:先先创创建流建流对对象象再使用成再使用成员员函数函数open()open()打开指定的文件。打开指定的文件。创创建流建流对对象又可分两种情况象又可分两种情况一种情况是一种情况是创创建建fstreamfstream类类的的对对象象另一种情况是另一种情况是创创建建ifstreamifstream类类或或ofstreamofstream类类的的对对象。象。9.5 9.5 磁盘文件的磁盘文件的输入和输出输入和输出(1
33、 1)通)通过创过创建建fstreamfstream类对类对象打开文件的方象打开文件的方法法 方法一:先方法一:先创创建建对对象,再打开文件象,再打开文件 格式如下:格式如下:fstreamfstream ;.open(.open(,);表表10.310.3 文件文件访问访问方式常量方式常量 方方 式式 名名用用 途途inin以以输输入(入(读读)方式打开文件)方式打开文件outout以以输输出(写)方式打开文件出(写)方式打开文件appapp以以输输出追加方式打开出追加方式打开ateate文件打开文件打开时时,文件指,文件指针针位于文件尾位于文件尾trunctrunc如果文件存在,将其如果文
34、件存在,将其长长度截断度截断为为0 0,并清除原有内容;,并清除原有内容;如果文件不存在,如果文件不存在,则创则创建新文件建新文件binarybinary以二以二进进制方式打开文件,默制方式打开文件,默认时为认时为文本方式文本方式nocreatenocreate打开一个已有文件,如打开一个已有文件,如该该文件不存在,文件不存在,则则打开失打开失败败noreplacenoreplace如果文件存在,除非如果文件存在,除非设设置置ios:ateios:ate或或ios:appios:app,否,否则则打开操作失打开操作失败败ios:inlios:outios:inlios:out以以读读和写的方式
35、打开文件和写的方式打开文件ios:outlios:binaryios:outlios:binary以二以二进进制写方式打开文件制写方式打开文件ios:inlios:binaryios:inlios:binary以二以二进进制制读读方式打开文件方式打开文件 方法二:方法二:创创建建对对象和打开文件合二象和打开文件合二为为一一 其格式如下:其格式如下:fstreamfstream (,););与前面方法相比与前面方法相比较较,省略了打开函数的,省略了打开函数的名字名字openopen。(2 2)通)通过创过创建建ifstreamifstream类对类对象或象或ofstreamofstream类类对
36、对象打开文件的方法象打开文件的方法 方法一:先方法一:先创创建建对对象,再打开文件象,再打开文件 格式如下:格式如下:ofstreamofstream ;.open(.open(););或者或者 ifstreamifstream;.open(.open(););方法二:方法二:创创建建对对象同象同时时打开文件打开文件格式如下:格式如下:ofstreamofstream (););或者或者 ifstreamifstream (););格式如下:格式如下:.close();.close();2 2关闭文件关闭文件先打开文件,打开文件先打开文件,打开文件时应时应先先创创建流建流对对象,象,打开文件打
37、开文件时应时应指出文件名和指出文件名和访问访问方式方式;文件打开后才可以文件打开后才可以进进行行读读写操作写操作;操作完操作完毕毕后后还还要关要关闭闭文件。文件。9.5.2 9.5.2 文本文本文件的文件的读写操作读写操作例例例例 编程将一些字符信息写入到指定的文件中。编程将一些字符信息写入到指定的文件中。编程将一些字符信息写入到指定的文件中。编程将一些字符信息写入到指定的文件中。#include#include#include#include#include#include void main()void main()fstreamfstream out;out;out.open(f1.tx
38、t,ios:out);out.open(f1.txt,ios:out);if(!outif(!out)cerrcerrf1.txt cant open.n;f1.txt cant open.n;abort();abort();outthis is a string.n;outthis is a string.n;outthis is a program.n;outthis is a program.n;outok!n;outok!n;out.closeout.close();();例例例例 编程从一个文本文件中读出的存放的信息。编程从一个文本文件中读出的存放的信息。编程从一个文本文件中读出的存
39、放的信息。编程从一个文本文件中读出的存放的信息。#include#include#include#include#include#include void main()void main()fstreamfstream in;in;in.open(f1.txt,ios:in);in.open(f1.txt,ios:in);if(!inif(!in)cerrcerrf1.txt cant open.n;f1.txt cant open.n;abort();abort();char s80;char s80;while(!in.eofwhile(!in.eof()()in.getline(s,si
40、zeof(sin.getline(s,sizeof(s););coutcoutssendlendl;in.closein.close();();例例例例 编程将一个文件的内容复制到另一个文件中。编程将一个文件的内容复制到另一个文件中。编程将一个文件的内容复制到另一个文件中。编程将一个文件的内容复制到另一个文件中。#include#include#include#include#include#include void main()void main()fstreamfstream infile,outfileinfile,outfile;infile.open(f2.txt,ios:in);i
41、nfile.open(f2.txt,ios:in);if(!infileif(!infile)cerrcerrf2.txt cant open.n;f2.txt cant open.n;abort();abort();outfile.open(f3.txt,ios:out);outfile.open(f3.txt,ios:out);if(!outfileif(!outfile)cerrcerrf3.txt cant open.n;f3.txt cant open.n;abort();abort();char char chch;while(infile.get(chwhile(infile.g
42、et(ch)outfile.put(choutfile.put(ch););infile.closeinfile.close();();outfile.closeoutfile.close();();二二进进制文件的制文件的读读写操作与文本文件的写操作与文本文件的读读写写操作基本相同操作基本相同;区区别别在于在于二二进进制文件来制文件来说说打开打开时时需要加上需要加上ios:binaryios:binary方式。方式。用于二用于二进进制文件制文件读读写函数通常使用写函数通常使用readread()()函数和函数和write()write()函数。函数。9.5.3 9.5.3 二进制文件的读写操
43、作二进制文件的读写操作例例例例 分析下列程序的输出结果,熟悉二进制文件的使用方法。分析下列程序的输出结果,熟悉二进制文件的使用方法。分析下列程序的输出结果,熟悉二进制文件的使用方法。分析下列程序的输出结果,熟悉二进制文件的使用方法。#include#include#include#include#include#include structstruct person person char name20;char name20;double height;double height;unsigned short age;unsigned short age;person people5=Li,
44、1.88,35,person people5=Li,1.88,35,Hu,1.91,25,Hu,1.91,25,Gao,1.75,33,Gao,1.75,33,Mao,1.72,32,Mao,1.72,32,Lu,1.69,50;Lu,1.69,50;void main()void main()fstreamfstream file;file;file.open(f5.dat,ios:in|ios:out|ios:binary);file.open(f5.dat,ios:in|ios:out|ios:binary);if(!fileif(!file)cerrcerrf5.dat cant op
45、en.n;f5.dat cant open.n;abort();abort();for(intfor(int i(0);i5;i+)i(0);i5;i+)file.write(charfile.write(char*)&*)&peoplei,sizeof(peopleipeoplei,sizeof(peoplei););file.seekp(0,ios:beg);file.seekp(0,ios:beg);for(ifor(i=0;i5;i+)=0;i5;i+)file.read(charfile.read(char*)&*)&peoplei,sizeof(peopleipeoplei,siz
46、eof(peoplei););coutcoutpeoplei.namepeoplei.namettpeoplei.heightpeoplei.heightttpeoplei.agepeoplei.ageendlendl;file.closefile.close();();文件文件读读取方式:取方式:l 顺顺序序读读取取l 随机随机读读取取l打开、关打开、关闭闭文件文件l读读写数据写数据l定位定位读读、写指、写指针针9.5.4 9.5.4 随机随机访问数据文件访问数据文件定位定位读读、写指、写指针针的函数:的函数:在在类类istreamistream中定中定义义的定位的定位读读指指针针的的成成员
47、员函数有如下几种:函数有如下几种:l istreamistream&istream:seekgistream:seekg();l istreamistream&istream:seekgistream:seekg(,);l long long intint&istream:tellgistream:tellg()();9.5.4 9.5.4 随机随机访问数据文件访问数据文件 在在类类ostreamostream中定中定义义的定位写指的定位写指针针的的成成员员函数有如下几种:函数有如下几种:l ostreamostream&ostream:seekpostream:seekp();l ostre
48、amostream&ostream:seekpostream:seekp(,);l long long intint ostream:tellpostream:tellp()();具有下述含具有下述含义义:l cur=1 /cur=1 /相相对对于当前于当前读读/写指写指针针所指的位置所指的位置l beg=0 /beg=0 /相相对对于文件于文件头头的位置的位置l end=2 /end=2 /相相对对于文件尾的位置于文件尾的位置#include#include#include#include void main()void main()fstreamfstream file(f6.dat,io
49、s:in|ios:out|ios:binary);file(f6.dat,ios:in|ios:out|ios:binary);for(intfor(int i(1);i=10;i+)i(1);i=10;i+)file.write(charfile.write(char*)&*)&i,sizeof(inti,sizeof(int););long long intint pos=pos=file.tellpfile.tellp();();coutcoutposposendlendl;for(ifor(i=11;i=20;i+)=11;i=20;i+)file.write(charfile.wri
50、te(char*)&*)&i,sizeof(inti,sizeof(int););file.seekg(posfile.seekg(pos););file.read(charfile.read(char*)&*)&i,sizeof(inti,sizeof(int););coutcoutThe data stored is iThe data stored is iendlendl;file.seekp(-4,ios:end);file.seekp(-4,ios:end);file.read(charfile.read(char*)&*)&i,sizeof(inti,sizeof(int););