[互联网]c++第11章C++输入输出流与文件系统.ppt_第1页
[互联网]c++第11章C++输入输出流与文件系统.ppt_第2页
[互联网]c++第11章C++输入输出流与文件系统.ppt_第3页
[互联网]c++第11章C++输入输出流与文件系统.ppt_第4页
[互联网]c++第11章C++输入输出流与文件系统.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第11章 C+输入/输出流与文件系统,C+语言程序设计教程 第11章 C+输入输出流,第11章 C+输入/输出流与文件系统,学习目标,理解C+的输入/输出流的概念; 熟悉I/O流的工作过程; 熟悉各种格式标志与各种格式控制方法; 分清文本文件与二进制文件的区别; 掌握文本文件的输入/输出的步骤与操作; 掌握二进制文件的输入/输出的步骤与操作; 会运用文件指针以及各种标志;,C+语言程序设计教程 第11章 C+输入输出流,C+中的I/O是以流(stream)的形式出现的。流是实际上是一个处于传输状态的字节序列,是字节在对象之间的“流动”, 流的操作包括输入与输出。输入操作是字节从外部设备(包括键盘、磁盘、网络连接)输入到内存,是字节从设备到内存的流动。输出操作是从内存输出到外部设备(如显示器、打印机、磁盘、网络连接),是字节从内存到外部设备的流动。,C+语言程序设计教程 第11章 C+输入输出流,1. I/O流的概念,ostream 类提供了格式化和无格式的输出功能。输出功能包括: 用插入操作符输出标准类型数据;用put成员函数输出字符;用write成员函数实现无格式输出。 最常用的输出方法是在cout上用插入操作符,插入操作符可以接受任何标准类型的实参,包括const char *、标准库string、complex等类型。实参可以是任何表达式包括函数调用,只要其结果是能被插入操作符能接受的数据类型即可。,C+语言程序设计教程 第11章 C+输入输出流,2. 输出流,2.演示的功能,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,a c string a c+ string (3.14159,-1.234) 12 11 10 &i:006AFDC4 pi:006AFDC4 &s1:006AFDE8 s1:0046C040,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,the larger of 10, 20 is 0,每一个输入/输出流对象都维护一个格式状态字,用它表示流对象当前的格式状态并控制流的格式,例如整型值的进制基数或浮点数的精度。C+提供了多种格式控制的方法,如使用操纵符修改对象的格式状态字来控制流的格式、运用成员函数。 格式标志是一组用于设置I/O流格式状态字的一个数,这些格式标志属于ios类。,C+语言程序设计教程 第11章 C+输入输出流,3. 流的格式控制,表11-3 格式状态字设置函数,其中, IFlags与IMask 可以是单个格式标志,也可以是与运算& 和或运算|将格式标志 连接的表达式,还可以是一个长整型数。,2.揭开格式标志的秘密,C+语言程序设计教程 第11章 C+输入输出流,2.揭开格式标志的秘密,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,Default flag is:201 800 hex 200 dec 400 oct e00 basefield 100 internal 40 left 80 right 1c0 adjustfield 2000 fixed 1000 scientific e00 basefield 8 showbase 10 showpoint 20 showpos 1 skipws 4 uppercase 4000 boolalpha 2 unitbuf,C+还提供了许多流操纵符,用于执行格式化的输入/输出操作,这些操纵符可以直接用在流中。,C+语言程序设计教程 第11章 C+输入输出流,4. 格式操纵符,表11-4 格式操纵符,C+语言程序设计教程 第11章 C+输入输出流,2.格式操纵符举例,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,Default flag is:201 After set Hex:800 boolvalue:1 boolalpha:true x=64,C+语言程序设计教程 第11章 C+输入输出流,5. 格式控制成员函数,表11-5 格式控制成员函数,从成员函数表中可以看出, 成员函数的功能与操纵符中的函数对应。如: width()与setw(),fill(c)与setfill(c),precision(n)与setprecision(n),flags(flag)与setiosflags(flag)分别对应。,2.格式操纵符与成员函数对比,C+语言程序设计教程 第11章 C+输入输出流,2.格式操纵符与成员函数对比,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,3.141593 00000003 3.1 3.14 3.142 3.1416 3.14159 3.141593 3.1415927 3.14159265 3.141592654 3.141592654 00000003 3.1 3.14 3.142 3.1416 3.14159 3.141593 3.1415927 3.14159265 3.141592654 3.141592654,istream 类提供了格式化和非格式的输入功能。最常用的输入方法是在标准输入流对象cin上使用用提取操作符。 格式如下: cinobj1obj2; 提取操作符从与键盘相连的标准输入流cin中提取数据拷贝给相应的对象。数据的提取与拷贝是从输入回车开始的,提取操作符忽略了流中的空白、制表符、回车,换行。当遇到流结束标志EOF(-1),或者提取了一个无效的值试图拷贝给对象时,提取操作符返回0(false) 给cin。 每个输入流都含有一系列错误状态位,当提取了一个无效值给对象时,比如:输入类型错时,除了返回出错信息false给cin外, 还会设置流的failbit状态位,结束提取操作。,C+语言程序设计教程 第11章 C+输入输出流,11.4 输入流,2.标准输入,C+语言程序设计教程 第11章 C+输入输出流,运行结果:, 2 a 3.4 5.6 7.8 9 a b 2 a 3.4 5 .6 7.8 9 a,C+语言程序设计教程 第11章 C+输入输出流,表11-6 输入流常用成员函数,2.输入函数get举例,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,1234567890 1234 4 5678 4 90 2,2.输入函数getline举例,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,1234567890 或12345 0:1234 4,对编程者而言,用户的行为是无法预测的。如当程序期望用户输入整数,而用户有意或无意输入了字符串,或超过了整数表示范围的数。这都会使数据流产生错误。在ios类中,除了提供控制数据流的格式标志、操纵符、成员函数,还提供了流的错误侦测函数与错误状态位。 这些流错误状态位(标志 )属于ios类,各种标志及意义如表11-7:,C+语言程序设计教程 第11章 C+输入输出流,11.5 数据流的错误侦测,表11-7 流错误状态标志,C+语言程序设计教程 第11章 C+输入输出流,表11-8 流错误侦测函数,流的这些错误可以使用ios类提供的错误侦测函数来读取。 流错误侦测函数如表11-8。,11.5 数据流的错误侦测,到目前为止,程序执行所需的数据由键盘输入,执行的结果在显示器上显示或临时存于内存中,一旦程序执行完毕,数据将从内存中消失。下一次执行数据必须重新输入。 将程序所需数据和产生的数据保存的方法是使用文件,文件是保存在辅存中,如磁盘、光盘、磁带中的数据集合。 C+语言把每个文件看成是一个有序的字节流。文件打开时,就创建一个对象,并将这个对象和某个流关联起来。包含时,会自动生成cin、cout、cerr和clog这4个对象,与这些对象关联的流提供与文件通信的方法(文件操作)。如cin对象使程序从键盘或文件中输入数据,cout对象使程序能向屏幕或文件输出数据,cerr和clog使程序能向屏幕或其他设备输出错误信息。,C+语言程序设计教程 第11章 C+输入输出流,11.6 文件的输出/输入,C+语言程序设计教程 第11章 C+输入输出流,1. 文件的创建,C+负责文件输出/输入的类有ifstream(文件输入),ofstream(文件输出)以及fstream(文件输出/输入),见图11.1。 所谓的文件输入输出,是从程序或内存的角度而言的,文件输入是指从文件向内存读入数据;文件输出则指从内存向文件输出数据。类ifstream、ofstream、fstream分别在包含头文件ifstream、ofstream、fstream中定义,要使用它们,必须包含相应的头文件。 可以使用这些类建立文件流对象。 如下列语句: fstream myfile; 建立了一个文件流对象myfile。然后利用fstream提供的open()成员函数打开文件与流连接。open()函数的原型如下:,C+语言程序设计教程 第11章 C+输入输出流,表11-9 文件打开(操作)模式表,C+语言程序设计教程 第11章 C+输入输出流,1. 文件的创建,例如: myfile.open(“d:myprogp1_1.cpp“, ios:in|ios:out); 打开文本文件p1_1.cpp用于输入输出。 当用fstream、ofstream、ifstream建立文件流对象时可直接给出文件名、操作模式等参数,这样可以省略open()函数的使用。 输出文件流的建立可以使用如下方法: fstream ofile(“c:myprogf1.cpp“, ios:out); ofstream ofile(“c:myprogf1.cpp“) 输入文件流的建立方法: fstream ifile(“c:myprogf1.dat“, ios:in) ifstream ifile(“c:myprogdat.cpp“) 从图11-1 I/O流类层次结构中可以看出, fstream类继承于iostream, 而iostream又继承于istream和ostream,因此,定义于istream与ostream处理数据流输出与输入的成员函数都可以用在文件的输出与输入上。,C+语言程序设计教程 第11章 C+输入输出流,2. 文本文件的输出,C+的文件I/O模式分为两种:文本模式与二进制模式,默认的文件模式为文本模式。当使用文本模式时,输出到文件的内容为ASCII码字符(包括回车、换行) 。也就是说,文本文件中只能存储ASCII码字符。如整数123与浮点数234.5在文本文件中分别存储为: ”123”与”234.5”。 文本文件通常以.txt为后缀,C+的源程序文件也属于文本文件。文本文件在windows的记事本与书写器中都能打开,在linux系统下可以用vi, emacs等文本编辑软件来编辑。 文本文件输出可用插入操作符与成员函数write()。 文件输出的步骤一般为: (1) 建立输出文件流(对象),将建立的文件连接到文件流上。此步需要对文件是否建立成功进行判断,如果文件建立错误,则退出。 (2) 向输出文件流输出内容。 (3) 关闭文件(文件流对象消失时也会自动关闭文件),2.链表类模板,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,输入:Antony 80.5 John 90 Tom 60 Z 文件record.txt中的内容为: Antony80.5John90Tom60,C+语言程序设计教程 第11章 C+输入输出流,3. 二进制文件输出,文本文件中存储的是字符串,当我们要使用其中的数据就不方便了,如求学生成绩文件中的学生成绩的平均分。 二进制文件是指含ASCII码字符外的数据的文件,它不能由文本编辑软件打开。在实际应用中,大多数文件都是二进制文件,如图象文件(后缀包括.bmp, .jpg, .tif, .gif等),影像文件,声音文件,数据库文件。 Microsoft Word 的.doc文件也是二进制文件,因为除了字符外,它还含有字体、字号、颜色等数据。输出二进制文件的方法是使用write()成员函数。,2.文本文件输出举例,C+语言程序设计教程 第11章 C+输入输出流,C+语言程序设计教程 第11章 C+输入输出流,2.文本文件输出举例,C+语言程序设计教程 第11章 C+输入输出流,程序解释: 文件结果对照表如下表。 表11-10 文本文件与二进制文件对比,从表中看出,数据85.5在文本文件中为字符串“85.5”,长度为4字节。 在二进制文件中为0000AB42, 占固定长度4字节,即浮点数的长度。,C+语言程序设计教程 第11章 C+输入输出流,4. 文本文件的输入,文件的输入是指从文件中读数据到内存中,文本文件输入常用提取操作符, 在文件输入中要经常检查文件是否到达尾部,输入流的成员函数eof()用来侦测是否到达文件结尾。若读取到文件结尾时,返回true 。 文件输出一般要经过下列三个步骤: (1) 建立输入文件流(对象),将以输入方式打开的文件连接到文件流上。此步需要对文件是否打开成功进行判断,如果文件打开错误,则退出。 (2) 从输入文件流中读内容。此步需要对读文件是否成功进行判断,如果读入不成功或到文件尾,则读入结束。 (3) 关闭文件(文件流对象消失时也会自动关闭文件)。,2.文本文件的输入,C+语言程序设计教程 第11章 C+输入输出流,C+语言程序设计教程 第11章 C+输入输出流,5. 二进制文件输入,输入二进制文件使用成员函数read()每次读取固定长度的数据,同样用eof()判断是否到达文件尾。,2.二进制文件的输入,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,Antony 80.5 John 90 Tom 60 Tom 60,C+语言程序设计教程 第11章 C+输入输出流,在文件中,特别是二进制文件,每一笔数据(记录)都是一个接着一个连续排列。文件中记录的排列与内存中的数组一样。前面例子对文件的读写都是从头到尾,是否可以象读取数组一样随机读取文件中某个记录?有了文件指针后,就可以直接跳到指针处,读写指针处的记录。 在ios类中,定义了三个特定的文件指针: ios:beg, 文件开头指针 ios:cur, 当前指针位置 ios:end, 文件尾指针,6. 文件指针的使用,C+语言程序设计教程 第11章 C+输入输出流,表11-11 指针成员函数表,在istream与ostream类里定义了一些用来移动指针的成员函数,我们称为指针成员函数。列表如表11-11。,6. 文件指针的使用,2.文件指针使用实例,C+语言程序设计教程 第11章 C+输入输出流,2文件指针使用实例,C+语言程序设计教程 第11章 C+输入输出流,2.文件指针使用实例,C+语言程序设计教程 第11章 C+输入输出流,运行结果:,程序运行前,文件record.d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论