c++输入输出流及文件操作详解.ppt

上传人:wuy****n92 文档编号:66805136 上传时间:2022-12-21 格式:PPT 页数:88 大小:1.77MB
返回 下载 相关 举报
c++输入输出流及文件操作详解.ppt_第1页
第1页 / 共88页
c++输入输出流及文件操作详解.ppt_第2页
第2页 / 共88页
点击查看更多>>
资源描述

《c++输入输出流及文件操作详解.ppt》由会员分享,可在线阅读,更多相关《c++输入输出流及文件操作详解.ppt(88页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第7 7章章 输入输出流输入输出流本本 章章 内内 容容-第一讲第一讲 1、输入输出流的含义输入输出流的含义 流类与流对象流类与流对象2、标准输入输出流、标准输入输出流p标准标准IO流对象流对象 pIO流成员函数流成员函数 -get(),getline()与与 -put(),p 流状态及函数流状态及函数 clear(),good(),eof()本本 章章 内内 容容 -第二讲第二讲3、文件流及文件操作、文件流及文件操作 p 文件的概念文件的概念 数据流动方向,数据流动方向,文本文件与二进制文件文本文件与二进制文件p 文件流类与文件流对象文件流类与文件流对象p 文件的打开与关闭文件的打开与关闭

2、 打开方式打开方式p 顺序读写顺序读写/随机读写操作随机读写操作 文件指针文件指针p文件操作成员函数文件操作成员函数 ,put,get(),getline(),read(),write()第第7 7章章 输入输出流输入输出流p流流(stream)表示信息从源到目的端的流动,表示信息从源到目的端的流动,负责建立数据生产者和消费者之间的联系,负责建立数据生产者和消费者之间的联系,数据按顺序从一个对象传送到另一对象。数据按顺序从一个对象传送到另一对象。C+中把数据之间的传输操作称作中把数据之间的传输操作称作”流流”I/O系统的任务就是在内存和外部设备之间稳定可靠系统的任务就是在内存和外部设备之间稳定

3、可靠 地传输数据和解释数据。地传输数据和解释数据。程序中,对数据的输入程序中,对数据的输入/输出是以输出是以字节流字节流实现的实现的 应用程序对字节序列作出各种数据解释应用程序对字节序列作出各种数据解释.C+的输入输出流是指由若干的输入输出流是指由若干字节字节组成的字节序列组成的字节序列 流中的内容可以是流中的内容可以是ASCII字符、图形图像、数字音频字符、图形图像、数字音频视频等形式的信息。视频等形式的信息。7.1 IO7.1 IO流流7.1 IO7.1 IO流流 I/O流类库提供对象之间的数据交互服务流类库提供对象之间的数据交互服务 输出流输出流Output stream:数据从内存传送

4、到某个载体或设备中;数据从内存传送到某个载体或设备中;输入流输入流 Input stream:数据从某个载体或设备传送到内存中数据从某个载体或设备传送到内存中;_内存内存_输入数据输入数据输出数据输出数据7.1.1 缓冲区缓冲区o缓冲区缓冲区buffer是内存中的一个临时存储区,是内存中的一个临时存储区,用来匹配不同部件数据传输率的差异。用来匹配不同部件数据传输率的差异。通过使用缓冲的方式可以更高效地处理输入输出,通过使用缓冲的方式可以更高效地处理输入输出,信息从设备和程序之间传输时可临时存储在缓冲区中,信息从设备和程序之间传输时可临时存储在缓冲区中,等待累积成数据块或合适的事机再传送的目的地

5、。等待累积成数据块或合适的事机再传送的目的地。在在C+中输入输出流被定义为类,中输入输出流被定义为类,I/O库中的类称为流类,库中的类称为流类,编译系统提供了用于输入输出的编译系统提供了用于输入输出的iostream类库。类库。流类中的常用类的继承层次关系流类中的常用类的继承层次关系 7.1.2 7.1.2 流类流类 (1)标准流)标准流 提供通用输入输出操作提供通用输入输出操作,作为其他作为其他I/O流基类流基类 系统指定的标准设备的系统指定的标准设备的I/O操作。操作。(2)文件流)文件流 以外存中的文件为对象进行输入和输出。以外存中的文件为对象进行输入和输出。以文件为对象的输入输出,包括

6、从磁盘文件输入数据,以文件为对象的输入输出,包括从磁盘文件输入数据,或将数据输出到磁盘文件。或将数据输出到磁盘文件。(3)字符串流)字符串流 对内存中指定空间进行输入和输出。对内存中指定空间进行输入和输出。通常指定一个字符数组作为存储空间。通常指定一个字符数组作为存储空间。7.1.2 7.1.2 流类流类 iostream.h 包含操作所有输入包含操作所有输入/输出流所需的基本信息输出流所需的基本信息 istream.h,ostream.h iomanip.h 包含格式化包含格式化I/O操纵算子,用于指定数据输入输出的格式操纵算子,用于指定数据输入输出的格式 fstream.h 处理文件信息,

7、包括建立文件,读处理文件信息,包括建立文件,读/写文件的各种操作接口写文件的各种操作接口 每一种每一种C+版本通常还包含其他一些与版本通常还包含其他一些与I/O相关的库,提供特定系统的某些功能相关的库,提供特定系统的某些功能7.1.2 7.1.2 头文件头文件 I/O流类库预定义了一批流对象,连接常用的外部设备流类库预定义了一批流对象,连接常用的外部设备.程序员可以定义所需的程序员可以定义所需的I/O流对象,流对象,使用流库提供的工作方式实现数据传输。使用流库提供的工作方式实现数据传输。流类对象可以建立和删除,可从流中获取数据和向流添加数据。流类对象可以建立和删除,可从流中获取数据和向流添加数

8、据。7.1.3 7.1.3 流对象流对象istream cinostream cout输入流对象输入流对象_内存内存_输出流对象输出流对象7.2 标准流对象及常用成员函数标准流对象及常用成员函数o标准流对象是在标准流对象是在std命名空间中定义的流对象,命名空间中定义的流对象,提供内存与常用外部设备进行数据交互功能。提供内存与常用外部设备进行数据交互功能。声明在头文件声明在头文件iostream 7.2.1 7.2.1 标准输出流标准输出流 o cout ostream 类的对象(类的对象(console output)通常连向显示器,可以重定向(关联至文件)通常连向显示器,可以重定向(关联至

9、文件)在输出流类中重载在输出流类中重载的一组公用成员函数,实现安全便捷的一组公用成员函数,实现安全便捷的输出基本数据类型,的输出基本数据类型,输出自定义类型对象需要单独重载输出自定义类型对象需要单独重载 ostream&operator (基本类型标识符);(基本类型标识符);cout流在内存中流在内存中对应对应开辟了一个开辟了一个缓缓冲区,用来存放流中的数据。冲区,用来存放流中的数据。流插入运算符流插入运算符o标准错误流对象标准错误流对象cerr(console error)o标准错误流对象标准错误流对象clog(console log的的)作用都是在标准输出设备上显示出错信息,作用都是在标

10、准输出设备上显示出错信息,两个对象一般关联显示进行器输出。两个对象一般关联显示进行器输出。区别是区别是 cerr不经过缓冲区,直接向显示器上输出有不经过缓冲区,直接向显示器上输出有关信息,而关信息,而clog中的信息存放在缓冲区中,缓冲区中的信息存放在缓冲区中,缓冲区满后或遇满后或遇endl时输出。时输出。7.2.1 标准输出流标准输出流 cerr “Zero encountered.“endl;7.2.1 7.2.1 标准输出流标准输出流 ostreamostream类的公有成员函数类的公有成员函数 函数函数功能功能put无格式无格式,插入一个字节插入一个字节write从无格式从无格式,插入

11、一字节序列插入一字节序列flush刷新输出流刷新输出流seekp移动输出流指针移动输出流指针tellp返回输出流中指定位置的指针值返回输出流中指定位置的指针值operstor”从流中提取数据。从流中提取数据。7.2.2 7.2.2 标准输入流标准输入流 o cinistream类的对象,它从标准输入设备类的对象,它从标准输入设备(键盘键盘)获取数据,获取数据,程序中的变量通过流提取符程序中的变量通过流提取符“”从流中提取数据。从流中提取数据。在在istream流类重载中流类重载中的一组公用成员函数的一组公用成员函数 istream&operator(基本类型标识符(基本类型标识符&););流提

12、取符从流中提取数据时通常跳过输入流中的空格、流提取符从流中提取数据时通常跳过输入流中的空格、tab键、换行键、换行符等空白字符。符等空白字符。只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符才能从中提取数据。形成输入流,提取运算符才能从中提取数据。函数函数功能功能read无格式输入指定字节数无格式输入指定字节数get从流中提取字符,包括空格从流中提取字符,包括空格getline从流中提取一行字符从流中提取一行字符ignore提取并丢弃流中指定字符提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中

13、删除返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数统计最后输入的字符个数eatwhite忽略前导空格忽略前导空格seekg移动输入流指针移动输入流指针tellg返回输入流中指定位置的指针值返回输入流中指定位置的指针值operstor提取运算符提取运算符,不包括空格、不包括空格、Tab和回车分隔符和回车分隔符istreamistream类的公有成员函数类的公有成员函数 流插入运算符流插入运算符 ,可用于输入基本类型数据可用于输入基本类型数据,也可重载也可重载用于输出和输入用户自定义的数据类型用于输出和输入用户自定义的数据类型 7.2.3 7.2.3 重载流插入和流提取运算符

14、重载流插入和流提取运算符 重载函数形式重载函数形式:ostream&operator (istream&in,T&data);注意:只能将重载注意:只能将重载“”和和“”的函数作为的函数作为友元函数友元函数。自定义类自定义类 class Array public:Array(int size=1);Array();int&operator(int i);friend ostream&operator (istream&in,Array&a);private:int*element;int len;例例 为数组类重载流插入运算符和提取运算符为数组类重载流插入运算符和提取运算符 Array a(5

15、);cin a;cout a;6.3.4 重载流插入和流提取运算符使用重载版本访问对象使用重载版本访问对象 cout a arr1 arr2;cin 的别名的别名函数函数功能功能read无格式输入指定字节数get从流中提取字符,包括空格从流中提取字符,包括空格getline从流中提取一行字符从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定位置的指针值operstor提取运算符提取运算符istreamistream类的公有成员函数类的公有成

16、员函数 7.2.4 7.2.4 输入流操作输入流操作int istream:get();/char c=cin.get();istream&istream:get(char&rch);/cin.get(c);ostream&put(char ch);get.cpp函数函数功能功能read无格式输入指定字节数get从流中提取字符,包括空格从流中提取字符,包括空格getline从流中提取一行字符从流中提取一行字符ignore提取并丢弃流中指定字符peek返回流中下一个字符,但不从流中删除gcount统计最后输入的字符个数eatwhite忽略前导空格seekg移动输入流指针tellg返回输入流中指定

17、位置的指针值operstor提取运算符istreamistream类的公有成员函数类的公有成员函数 7.2.4 7.2.4 输入流操作输入流操作 istream&get(char*pch,int nCount,char delim=n);istream&getline(char*pch,int nCount,char delim=n);其作用是从输入流中读取n-1个字符,赋给指定的字符数组,如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回非0值(真),如失败(遇文件结束符)则函数返回0值(假)。读取完成后,从流中删除该终止符。读取完成后,从流中删除该终止符。

18、Get_getline.cpp7.2.4 7.2.4 输入流操作输入流操作 /字符串的输入字符串的输入 char ch120,ch220,ch320,ch420;cinch1;coutch1endl;cin.get(ch2,10);coutch2endl;cin.get(ch3,20);coutch3endl;cin.get(ch4,20,.);coutch4提取运算符提取运算符istream&ignore(int nCount=1,int delim=EOF);istreamistream类的公有成员函数类的公有成员函数 7.2.4 7.2.4 输入流操作输入流操作标识常量标识常量值值意义意

19、义ios:goodbit0 x00状态正常状态正常ios:eofbit0 x01文件结束符,当文件结尾时设置该标志文件结束符,当文件结尾时设置该标志ios:failbit0 x02I/O操作失败,数据未丢失,可以恢复操作失败,数据未丢失,可以恢复ios:badbit0 x04非法操作,数据丢失,不可恢复非法操作,数据丢失,不可恢复0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 0 0 0 1 00 0 0 0 0 0 0 0 0 0 0 0 0 1 0 07.2.5 7.2.

20、5 流错误状态流错误状态所有流都把流的状态存储在状态字中所有流都把流的状态存储在状态字中不同标志位中存储不同的错误状态位不同标志位中存储不同的错误状态位包含在类包含在类ios的的enum成员中成员中 ios ios 处理流错误状态的公有成员函数处理流错误状态的公有成员函数 函数函数功能功能int eof()const;返回返回eofbit状状态值态值。文件文件结结束符束符时时返回返回1,否,否则则返回返回0 int fail()const;返回返回failbit状状态值态值int bad()const;返回返回badbit状状态态int good()const;eofbit、failbit和和

21、badbit都没有被都没有被设设置,置,则则返回返回1 int rdstate()const;返回状返回状态态字字void clear(int n=0);恢复或恢复或设设置状置状态态字字7.2.4 7.2.4 流错误状态流错误状态运行程序,观测结果运行程序,观测结果 grade.cpp streamstate.cpp ios提供直接设置标志字的控制格式函数提供直接设置标志字的控制格式函数 iostream和和iomanip库还提供控制符简化库还提供控制符简化I/O格式化操作格式化操作(自学内容)(自学内容)7.3 7.3 格式控制格式控制ios类类格式化标志格式化标志o格格式式化化标标志志是是

22、类类定定义义的的枚枚举举集集合合,用用来来指指定定输输入入输输出格式化和操作的不同选择。出格式化和操作的不同选择。o该枚举类型定义:该枚举类型定义:enum skipws,left,right,internal,dec,oct,hex,showbase,showpoint,uppercase,showpos,scientific,fixed,unitbuf,stdio ;o引用格式化标志:引用格式化标志:ios:格式化标志格式化标志7.3.1 7.3.1 设置标志字设置标志字状态标志状态标志 值值 含义含义 输入输入/输出输出skipws 0X0001跳过输入中的空白Ileft 0X0002左

23、对齐输出Oright 0X0004右对齐输出Ointernal 0X0008在符号位和基指示符后填入字符Odec 0X0010转换基制为十进制I/Ooct 0X0020转换基制为八进制I/Ohex 0X0040转换基制为十六进制I/Oshowbase 0X0080在输出中显示基指示符Oshowpoint 0X0100输出时显示小数点Ouppercase 0X0200十六进制输出时一律用大写字母Oshowpos 0X0400正整数前加“+”号Oscientific 0X0800科学示数法显示浮点数Ofixed 0X1000定点形式显示浮点数Ounitbuf 0X2000输出操作后立即刷新流Ost

24、dio 0X4000输出操作后刷新stdout 和 stdreeOios 的标志常量的标志常量7.3.1 7.3.1 设置标志字设置标志字ios 控制格式的函数控制格式的函数函数函数功能功能long flags(long lFlags);long flags()const;用参数用参数lFlags更新标志字更新标志字返回标志字返回标志字long setf(long lFlags);设置设置lFlags指定的标志位指定的标志位long unsetf(long lFlags);将参数将参数lMask指定的标志位清指定的标志位清0 int width(int nw);设置下一个输出项的显示宽度为设置

25、下一个输出项的显示宽度为nwchar fill(char cFill);空白位置以字符参数空白位置以字符参数cFill填充填充 int precision(int np);用参数用参数np设置数据显示精度设置数据显示精度/例例4 设置输出宽度设置输出宽度#include void main()char*s=Hello;cout.fill(*);/置填充符置填充符 cout.width(10);/置输出宽度置输出宽度 cout.setf(ios:left);/左对齐左对齐 cout s endl;cout.width(15);/置输出宽度置输出宽度 cout.setf(ios:right,ios

26、:left);/清除左对齐标志位,置右对齐清除左对齐标志位,置右对齐 cout s endl;#include void main()int a,b,c;cout a;cout b;cout c;cout Output in decimal:n;cout.setf(ios:dec,ios:basefield);cout a=a b=b c=c endl;cout.setf(ios:hex,ios:basefield);cout Output in hexadecimal:n;cout a=a b=b c=c endl;cout.setf(ios:oct,ios:basefield);cout

27、Output in octal:n;cout a=a b=b c=c endl;/置八进制输出置八进制输出/置十六进制输出置十六进制输出/置十进制输出置十进制输出/置八进制输入置八进制输入/置十进制输入置十进制输入/置十六进制输入置十六进制输入例例5 5 不同基数形式的输入输出不同基数形式的输入输出#include void main()double x=22.0/7;int i;cout output in fixed:n;cout.setf(ios:fixed|ios:showpos);/定点输出,显示定点输出,显示+for(i=1;i=5;i+)cout.precision(i);cou

28、t x endl;cout output in scientific:n;/清除原有设置,科学示数法输出清除原有设置,科学示数法输出 cout.setf(ios:scientific,ios:fixed|ios:showpos);for(i=1;i=5;i+)cout.precision(i);cout x*1e5 endl;例例6 6 格式化格式化输输出浮点数出浮点数 控制符是控制符是istream和和ostream类定义了一批函数,类定义了一批函数,作为重载插入运算符作为重载插入运算符的右操作数的右操作数 控制控制I/O格式格式7.3.2 7.3.2 格式控制符格式控制符 7.3.2 7.

29、3.2 格式控制符格式控制符 控制符控制符功能功能输入输入/输出输出endl输出一个新行符,并清空流输出一个新行符,并清空流Oends输出一个空格符,并清空流输出一个空格符,并清空流Oflush清空流缓冲区清空流缓冲区Odec用十进制表示法输入或输出数值用十进制表示法输入或输出数值I/Ohex用十六进制表示法输入或输出数值用十六进制表示法输入或输出数值I/Ooct用八进制表示法输入或输出数值用八进制表示法输入或输出数值I/Ows提取空白字符提取空白字符Iiostream几个常用的控制符几个常用的控制符 例例7 7 不同基数形式的输入输出不同基数形式的输入输出/置八进制输出置八进制输出/置十六进

30、制输出置十六进制输出/置十进制输出置十进制输出/置八进制输入置八进制输入/置十进制输入置十进制输入/置十六进制输入置十六进制输入#include void main()int a,b,c;cout a;cout b;cout c;cout Output in decimal:n;cout.setf(ios:dec,ios:basefield);cout a=a b=b c=c endl;cout.setf(ios:hex,ios:basefield);cout Output in hexadecimal:n;cout a=a b=b c=c endl;cout.setf(ios:oct,ios

31、:basefield);cout Output in octal:n;cout a=a b=b c=c dec a;cin hex b;cin oct c;cout octa=a b=b c=cendl;cout a=a b=b c=cendl;cout hexa=a b=b c=cendl;7.3.2 7.3.2 格式控制符格式控制符 控制符控制符功能功能输入输入/输出输出resetiosflags(ios:lFlags)清除清除lFlags指定的标志位指定的标志位I/Osetiosflags(ios:lFlags)设置设置lFlags指定的标志位指定的标志位I/Osetbase(int b

32、ase)设置基数,设置基数,base=8,10,16I/Osetfill(char c)设置填充符设置填充符cOsetprecision(int n)设置浮点数输出精度设置浮点数输出精度Osetw(int n)设置输出宽度设置输出宽度Oiomanip的控制符的控制符 控制符控制符成成员员函数函数作用作用setfill(c)fill(c)设设置填充字符置填充字符为为字符常量或字符字符常量或字符变变量量csetprecision(n)precision(n)设设置置显显示小数的精度示小数的精度为为n位位setw(n)width(n)设设置域置域宽为宽为n个字符个字符setbase(n)setf()

33、设设置整数的基数置整数的基数为为n(n=8,10,16)setiosflags()setf()设设置置输输出格式的状出格式的状态态resetiosflags()unsetf()终终止已止已设设置置输输出格式的状出格式的状态态常用控制符与成员函数常用控制符与成员函数/例例8 整数的格式化输出整数的格式化输出#include#include using namespace std;void main()const int k=618;cout setw(10)setfill(#)setiosflags(ios:right)k endl;cout setw(10)setbase(8)setfill(

34、*)resetiosflags(ios:right)setiosflags(ios:left)k endl;#include void main()double x=22.0/7;int i;cout output in fixed:n;cout.setf(ios:fixed|ios:showpos);/定点输出,显示定点输出,显示+for(i=1;i=5;i+)cout.precision(i);cout x endl;cout output in scientific:n;/清除原有设置,科学示数法输出清除原有设置,科学示数法输出 cout.setf(ios:scientific,ios:

35、fixed|ios:showpos);for(i=1;i=5;i+)cout.precision(i);cout x*1e5 endl;例例9 9 格式化格式化输输出浮点数出浮点数 cout setiosflags(ios:fixed|ios:showpos);cout resetiosflags(ios:fixed|ios:showpos)setiosflags(ios:scientific);cout setprecision(i)xendl;coutsetprecision(i)x*1e5endl;7.4 7.4 文件处理文件处理 ifstream、ofstream 和和 fstream

36、 类类 用于内存与文件之间的数据传输用于内存与文件之间的数据传输7.4 7.4 文件处理文件处理 数据的层次结构数据的层次结构 Bit Byte Field Record File -DBMS C+把文件看成有序的字节流,提供低级和高级的把文件看成有序的字节流,提供低级和高级的IO功能功能 编码方式:编码方式:文本文件文本文件/二进制文件二进制文件 存取方式:存取方式:顺序读写文件顺序读写文件 /随机读写文件随机读写文件 文件的概念文件的概念 存储在外部介质中的数据集合称为文件存储在外部介质中的数据集合称为文件.0 1 2 3 n-1-内存内存-ifstream finfstream fino

37、utofstream fout读文件读文件写文件写文件读读/写文件写文件10.5.1 文件和流7.4.1 7.4.1 文件和流文件和流 文件流的概念文件流的概念 文件流是以外存文件为输入输出对象的数据流文件流是以外存文件为输入输出对象的数据流 文件文件7.4.1 7.4.1 文件和流文件和流0 1 2 3 4 5 n-1文件字节序号文件字节序号文件结束符文件结束符文件长度文件长度=n 文件流的概念文件流的概念 文件流是以外存文件为输入输出对象的数据流文件流是以外存文件为输入输出对象的数据流 输出文件流:从内存流向磁盘文件的数据输出文件流:从内存流向磁盘文件的数据 输入文件流:从磁盘文件流向内存

38、的数据输入文件流:从磁盘文件流向内存的数据 每个文件流都有一个内存缓冲区与之对应每个文件流都有一个内存缓冲区与之对应文件文件对象对象内存内存对象对象ifstream fin读文件读文件2 4 3 7 8 10.5.3 文本文件a 0X00f3b 0X004e7.4.1 7.4.1 文件和流文件和流输入文件流对象输入文件流对象文件文件写文件写文件10.5.3 文本文件a 0X00f3b 0X004e7.4.1 7.4.1 文件和流文件和流文件文件int c;c=a+b;fout c=c endl;ofstream foutc 0X0141C=3 2 1 7.4.1 7.4.1 文件和流文件和流s

39、treamclass fileObj(fileName,openMode);fileObj.open(fileName,openMode);文件操作的基本步骤:文件操作的基本步骤:打开文件打开文件读读 /写文件写文件 关闭文件关闭文件 ,get(),getline(),read()fileObj.close();7.4.2 7.4.2 打开和关闭文件打开和关闭文件 打开文件打开文件 建立文件流对象;建立文件流对象;流对象与磁盘文件关联;流对象与磁盘文件关联;指定文件的打开方式指定文件的打开方式 关闭文件关闭文件 解除流对象与磁盘文件关联解除流对象与磁盘文件关联 1.1.打开文件打开文件方法方法

40、1 调用流类带参数的构造函数,调用流类带参数的构造函数,建立流对象时连接外部文件建立流对象时连接外部文件流类流类 对象名对象名(文件名文件名,方式方式);egifstream infile(datafile.dat,ios:in);ofstream outfile(d:newfile.dat,ios:out);ifstream、ofstream 或或 fstream1.1.打开文件打开文件方法方法2 先建立流对象,先建立流对象,再调用再调用fstream:open()函数连接外部文件函数连接外部文件流类流类 对象名对象名;对象名对象名.open(文件名文件名,方式方式);ifstream、of

41、stream 或或 fstream 打开(创建)一个文件打开(创建)一个文件newfile.dat,准备写:,准备写:ofstream outfile;/建立输出文件流对象建立输出文件流对象 outfile.open(d:newfile.dat,ios:out);打开一个已有文件打开一个已有文件datafile.dat,准备读:,准备读:ifstream infile;/建立输入文件流对象建立输入文件流对象 infile.open(“datafile.dat”,ios:in);open 函数原型函数原型void open (const char *,int mode,int=filebuf:o

42、penprot);1.1.打开文件打开文件参数分别表示:参数分别表示:文件名,文件的打开方式,文件的访问方式文件名,文件的打开方式,文件的访问方式标识常量标识常量意义意义ios:in输入读方式打开文件输入读方式打开文件ios:out输出写方式打开文件输出写方式打开文件ios:ate打开文件时,指针指向文件尾打开文件时,指针指向文件尾ios:app输出方式打开文件,追加方式写入输出方式打开文件,追加方式写入ios:trunc删除文件现有内容删除文件现有内容ios:nocreate如果文件不存在,则打开操作失败如果文件不存在,则打开操作失败ios:noreplace如果文件存在,则打开操作失败如果

43、文件存在,则打开操作失败ios:binary二进制方式打开,默认为文本方式二进制方式打开,默认为文本方式 egifstream infile(datafile.dat,ios:in);ofstream outfile(d:newfile.dat,ios:out);fstream rwfile(myfile.dat,ios:in|ios:out);ofstream ofile(a:binary,ios:binary|ios:app);用或运算符用或运算符 “|”连接连接两个表示打开方式的标识常量两个表示打开方式的标识常量1.1.打开文件打开文件打开一个二进制文件进行追加操作打开一个二进制文件进行

44、追加操作2.2.关闭文件关闭文件 关闭文件操作包括把缓冲区数据完整地写入文件,关闭文件操作包括把缓冲区数据完整地写入文件,添加文件结束标志,添加文件结束标志,切断流对象和外部文件的连接切断流对象和外部文件的连接当一个流对象的生存期结束,系统也会自动关闭文件;当一个流对象的生存期结束,系统也会自动关闭文件;若流对象的生存期没有结束,用若流对象的生存期没有结束,用close()close()关闭文件后,关闭文件后,该流对象可以重用该流对象可以重用eg:ofstream ofile;/创建输出文件流创建输出文件流 ofile.open(myfile1);/ofile流与文件流与文件“myfile1”

45、相关相关联联 /访问访问文件文件“myfile1”ofile.close();/关闭关闭文件文件“myfile1”ofile.open(“myfile2”);/重用对象重用对象ofile等价于使用构造函数:等价于使用构造函数:ofstream ofile(myfile1);2.2.关闭文件关闭文件close()函数关闭文件函数关闭文件但流对象仍然存在但流对象仍然存在3打开与关闭错误打开与关闭错误if(!outfile)/outfile.open(“myfile2.dat”)cerr”ereor:unable to open file2!”;检测文件是否成功打开,检测文件是否成功打开,可在条件表

46、达式中使用取反操作符(!)测试流状态可在条件表达式中使用取反操作符(!)测试流状态 为了测试成功关闭文件,可以调用为了测试成功关闭文件,可以调用fail()函数,如函数,如myfile2.close();if(myfile2.fail()cerr get()read()OUTPUT put()write()磁盘文件磁盘文件目的地目的地源源ofstream7.4.3 7.4.3 文本文件文本文件文本文件文本文件 文件的每个字节都是用文件的每个字节都是用ASCIIASCII代码存放数据,代码存放数据,即每个字节存放一个字符,这种文件又称字符文件即每个字节存放一个字符,这种文件又称字符文件 文件的默

47、认打开方式为文本文件文件的默认打开方式为文本文件 文本文件是顺序存取文件文本文件是顺序存取文件 文文本本文文件件本本身身没没有有记记录录逻逻辑辑结结构构,通通常常一一个个逻逻辑辑记记录录用用换换行行符符分分隔隔;数数据据项项之之间间可可以以用用空空白白符符、换换行行符符、制制表表符符等分隔。等分隔。7.4.3 7.4.3 文本文件文本文件使用使用完成文件读写完成文件读写 向文本文件中写入数据,并从文件中读出数据向文本文件中写入数据,并从文件中读出数据 file1.cppfile1.cpp 练习:练习:改写程序改写程序,将新的数据追加写入文件中,将新的数据追加写入文件中 file2.cppfil

48、e2.cpp使用使用get(),put()完成文件读写完成文件读写 练习:将已有文件的内容复制到新的文件中练习:将已有文件的内容复制到新的文件中 file3.cppfile3.cpp#include#include void main()ofstream out(“test);if(!out)cout cannot open file.;return;out 10 123.45 ;out nThis is a short text file.;out.close();例例 将数据写入到将数据写入到文件文件 file1.cpp对数值常量对数值常量转换成字符转换成字符#include#includ

49、e void main()char ch;int i;float f;char str1 10 ,str2 10 ;ifstream in(test);if (!in)cout i f ch str1 str2;cout i “”f “”ch n;cout str1 str2 endl;in.close();ifstream inint i float f char chchar str1char str210.5.3 文本文件例例 从从文件文件 读出数据读出数据 file1.cpp#include#include void main()char ch;int i;float f;char s

50、tr1 10 ,str2 10 ;ifstream in(test);if (!in)cout i f ch str1 str2;cout i “”f“”ch n;cout str1 str2 endl;in.close();int i 10float f 123.45char ch Tchar str1 hischar str2 isifstream in例例 从从文件文件 读出数据读出数据 file1.cpp#include#include void main()ifstream f1(test);if (!f1)cout cannot open test for input.;retur

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁