C语言程序设计(第三版)高禹 第12章文件_第1页
C语言程序设计(第三版)高禹 第12章文件_第2页
C语言程序设计(第三版)高禹 第12章文件_第3页
C语言程序设计(第三版)高禹 第12章文件_第4页
C语言程序设计(第三版)高禹 第12章文件_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

第 12章 文件 第 1页 第 12章 文件 本章概述 本章的学习目标 主要内容 第 12章 文件 第 2页 本章概述 文件操作是 多应用问题中会用到文件操作。 本章讨论 括文件的打开与关闭、文件的定位与检测、文件的读写所使用的各种函数和编程方法。 第 12章 文件 第 3页 本章的学习目标 本章教学目的:理解文件的概念,掌握用来进行文件的打开、关闭、定位、检测、读写操作的方法。 本章教学重点:文件的读写 本章教学难点:文件的定位与检测 第 12章 文件 第 4页 主要内容 文件概述 文件的打开与关闭 文件的定位和检测 文件的读写 程序设计举例 第 12章 文件 第 5页 文件概述 文件 文件是程序设计中的一个重要概念,所谓 “文件”是指存储在外部介质(如磁盘)上的一组相关数据的集合, 为了便于定位这组数据,通常要为它取一个名称,即文件名。操作系统就是以文件为单位对数据进行管理的,如果想找存储在外部介质上的数据,必须按文件名找到存放该数据的文件,然后再从文件中读取数据。 从用户的角度来看,文件可以分普通文件和设备文件。 普通文件 是驻留在外部介质上的有序数据集,它可以是源文件、目标文件、可执行程序,也可是一组待输入的原始数据,或者是一组输出结果。前者通常称为程序文件,后者则可称为数据文件。 设备文件 是指与主机相联的各种外部设备,如显示器、键盘等,对于操作系统而言,每一个与主机相联的输入 /输出设备都是一个文件,其输入输出等同于文件的读和写。 例如,通常 将显示器定义为标准输出文件,将键盘定义为标准输入文件。我们前面使用的 、 等 显示器), 、 等 键盘)输入数据。 第 12章 文件 第 6页 文件概述 数据文件的存储形式 从文件的编码方式来看,文件可以分为 种文件在磁盘中存储时每个字符对应一个字节,存放的是该字符的 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。 如 于 此能读懂其内容,而二进制文件虽然有时也能显示在屏幕上,但其内容却无法直接读懂。 第 12章 文件 第 7页 图 00110001、 00110010、 00110011、00110100分别是字符 1、 2、 3、 4的 例如,数字 1234的几种存储形式如图 第 12章 文件 第 8页 存储内容用 字节与字符一一对应,一个字节代表一个字符,便于对字符进行逐个处理,也便于输出字符,但一般占用的存储空间较多,而且要花费转换时间。 用二进制形式输出,可以节省外存空间和转换时间,但一个字节与字符无一一对应关系,不能直接输出字符形式。一般中间结果数据需要暂时保存在外存上,常用二进制文件保存。 因为 以 不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制,即在输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔。我们把这种文件称作“流式文件”。 很强的灵活性。 第 12章 文件 第 9页 标准文件与非标准文件 在老版本的 C(如 )中对文件的处理方式有两种: 一种是缓冲文件系统 又称标准文件系统, 另一种是非缓冲文件系统 又称非标准文件系统。 第 12章 文件 第 10页 所谓“ 缓冲文件系统 ”是指系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据时必须先送到内存中的缓冲区,缓冲区装满数据后,再一起送到磁盘中去。同样,从磁盘向内存中读入数据时,则一次从磁盘文件中将一批数据读入到缓冲区,然后再从缓冲区逐个地将数据送到程序数据区(给程序中的变量),如图 冲区的大小随 般为 512字节。 第 12章 文件 第 11页 所谓“非缓冲文件系统”是指系统不会自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。 文件的读写都是用库函数来实现的, 它们对文件进行读写。 本章只介绍 规定的缓冲文件系统,即标准文件系统。 第 12章 文件 第 12页 文件类型指针 在缓冲文件系统中有一个关键概念是“文件类型指针”,每一个存在的文件都在内存中开辟一个区域,用来存放文件的有关信息(如文件的名称、文件状态、文件当前位置等),这些信息保存在一个结构体变量中,该结构体由系统声明,取名为 构体类型此,进行文件操作时,要用 可以定义一个 来存放一个的文件信息。也可以一个定义 来指向某一个 第 12章 文件 第 13页 文件类型指针 定义文件类型指针变量的格式为: *指针变量标识符; 例如: * 上面的定义表示 文件被打开时,系统自动为该文件定义一个 该文件与对应的 为 过 后按该 便对该文件实施操作。 习惯上笼统地把 谓打开文件就是指建立文件的各种有关信息,并使 便对文件进行操作。关闭文件则断开 就禁止对该文件进行操作。 第 12章 文件 第 14页 文件的打开与关闭 开文件的函数( 函数 数 * 件名,文件使用方式 ) 例如: fp=d: “r”); 表示要打开的文件名为 文件在 d: 使用文件的方式为 “ 只读 ” ( 。 样 由上面例子可以看出 , 在打开一个文件时 , 通知编译系统以下信息: 需要打开的文件标识 , 也就是文件的位置及文件名; 使用文件的方式 ( 是 “ 读 ” 还是 “ 写 ” 等 ) ; 让哪一个指针指向被打开的文件 。 第 12章 文件 第 15页 表 12件的使用方式 字符 含 义 r 以只读方式打开一个文本文件。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件首部的第一个字符。 w 以只写方式打开一个文本文件。若文件不存在,则建立该文件。若文件已存在,则删除原文件内容,写入新内容。 a 以追加方式打开一个文本文件。只能向文件尾追加数据。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。 只读方式打开一个二进制文件。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件首部的第一个字节。 只写方式打开一个二进制文件。若文件不存在,则建立该文件。若文件已存在,则删除原文件内容,写入新内容。 追加方式打开一个二进制文件。只能向文件尾追加数据。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。 第 12章 文件 第 16页 表 12件的使用方式 字符 含 义 r+ 以读 /写方式打开一个文本文件。文件必须存在。打开后,文件内部的位置指针指向文件首部的第一个字符。打开后,可以读取文本内容,也可以写入文本内容,也可以既读又写。 w+ 以读 /写方式打开或新建立一个文本文件。若文件已存在,则新的写操作将覆盖原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下,再读取文件内容。 a+ 以读和追加的方式打开一个文本文件。允许读或追加。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可将位置指针移到某个位置,读取文件内容。 以读 /写方式打开二进制文件。文件必须存在。打开后,文件内部的位置指针指向文件首部的第一个字节。打开后,可以读取数据,也可以写入数据,也可以既读又写 。 以读 /写方式打开或新建立一个二进制文件。若文件已存在,则新的写操作将覆盖原来的数据。若文件不存在,则建立一个新文件。还可以在不关闭文件的情况下,再读取文件内容。 以读和追加的方式打开一个二进制文件。允许读或追加。文件必须存在,否则打开失败。打开后,文件内部的位置指针指向文件尾。可在文件尾追加数据,也可将位置指针移到某个位置,读取数据。 第 12章 文件 第 17页 文件的打开与关闭 如果成功打开一个文件 , 则 函数将返回一个指向该文件的指针 , 否则将返回空指针 ( , 由此可以判断一个文件是否成功打开 。 第 12章 文件 第 18页 文件的打开与关闭 关闭文件的函数 使用格式如下: 件类型指针 ); 例如: 用 文件关闭成功时返回 0,否则返回 为 以根据该函数返回的值判断文件是否正常关闭。 第 12章 文件 第 19页 文件的打开与关闭 例 打开与关闭文件示例。 # i; fp= “; if( n”); n”); i= i=0) n”); n”); ; 第 12章 文件 第 20页 文件的定位和检测 文件的顺序读写和随机读写 对文件的读写方式有两种:顺序读写和随机读写,也称为顺序存取和随机存取。 顺序读写的特点是:从文件开始到文件结尾,一个字节一个字节地顺序读写,读写完第一个字节,才能顺序读写第二个字节,读写完第二个字节,才能顺序读写第三个字节, ,依次类推。 随机读写的特点是:允许从文件的任何位置开始读写,利用后面介绍的 可以使文件内部的位置指针指向某一个位置,从该位置开始读写。 用程序来控制文件内部的位置指针的移动,称为文件的定位。对于存储在磁盘上的文件,既可以采用顺序读写方式,也可以采用随机读写方式。 第 12章 文件 第 21页 文件的定位和检测 1 件类型指针 ); 例如: 定位到文件的开头,此函数无返回值。 注意:刚打开文件时,文件内部的位置指针是定位 在文件的开头,即文件首。 第 12章 文件 第 22页 文件的定位和检测 2 件类型指针,位移量,起始点); 到规定的位置。 第 12章 文件 第 23页 文件的定位和检测 件类型指针”,指明了要操作是哪一个文件。第二个参数是“位移量”,指明了从“起始点”开始移动的字节数,位移量必须是长整型数据,加后缀“ L”;若位移量是正整数,表示文件内部的位置指针向文件尾方向移动,若位移量是负整数,表示文件内部的位置指针向文件首方向移动。第三个参数是“起始点”,指明了移动时的起始位置,起始点有三种取值,分别代表文件首、文件尾和当前位置,如表 12 表 12符号常量 数值 含义 从文件首开始移动 从文件的当前位置开始移动 从文件尾开始移动 第 12章 文件 第 24页 例如: 100L, 或 100L, 0); 将文件内部的位置指针从文件首开始向文件尾方向移动 100个字节。 20L, 或 20L, 1); 将文件内部的位置指针从当前位置向文件尾方向移动 20个字节。 或 1); 将文件内部的位置指针从当前位置向文件首方向移动 30个字节。 或 2); 将文件内部的位置指针从文件尾开始向文件首方向移动 10个字节。 第 12章 文件 第 25页 文件的定位和检测 1 件类型指针 ); 到达文件尾则返回一个非 0值(真),否则返回 0(假)。当我们对文件操作时,例如顺序读取文件的所有数据,可以使用这个函数来判断文件内容是否结束,若文件内容没有结束,则继续读取数据,否则结束读取操作。 下面的循环语句是使用 文件内容没有结束,则使用 ! ; 第 12章 文件 第 26页 文件的定位和检测 2 长整型变量 =件类型指针 ); 调用成功, 文件开头到位置指针所指当前位置的总的字节数(长整型),否则返回值是 第 12章 文件 第 27页 文件的定位和检测 1 件指针 ); 表示未出错,否则表示有错。 执行 。 第 12章 文件 第 28页 文件的定位和检测 2 件指针 ); 。若文件发生了输入输出错误,其错误标志被置为非 0,该值会一直保持到再一次调用输入输出函数或者使用 文件刚打开时,错误标志为 0。 第 12章 文件 第 29页 文件的读写 1 件类型指针); 字符的 读到文件结束符( z)或读取不成功,则返回 从文件读取一个字符后,文件的当前位置将后移一个字节。 第 12章 文件 第 30页 例如: fp=d:“r”); ch= 表示从 给字符型变量 与 能相同,这里的 键盘)。这两种形式的作用都是从终端(如键盘)输入一个字符,函数值就是该字符。 第 12章 文件 第 31页 2 符表达式,文件类型指针); 字符表达式”代表要写入的字符,字符表达式可以是字符常量或字符变量。若写入成功,则函数的返回值是所写入字符的 则返回值为 向文件写入一个字符后,文件的当前位置将后移一个字节。 第 12章 文件 第 32页 例如: A; fp=d:“w”); 表示将存储在变量 A写入 能相同,这里的 显示器)。这两种形式的作用都是向终端(如显示器)输出一个字符。 第 12章 文件 第 33页 例 从键盘输入若干个字符,将其中的小写英文字母写入 本文件中,将其它字符显示在屏幕上,若输入字符 #,则程序结束。 #) (fp=d:“w”)=n”); ); ch=); =#) a & a & A & 10 ; 第 12章 文件 第 38页 例 从上题的 d:示在屏幕上。 #10 ; * i; fp=d:)=t ); ); i=0;i * 2, 1, 3, 0=” 0; fp=c: w+); %s , %d , %d , %d , %s , %d ,%d , %d , & b1+b2+%s , %d , %d , %d , %f n , b3, ; 第 12章 文件 第 44页 文件的读写 1 n, 以是数组名或指针变量名。整型变量 后在所有字符的后面加一个字符串结束标志 0,将这个字符串存于 能读取的字符数不足 为规定在读完 遇见换行符或文件结束( 则结束读取。正常情况下,函数返回值是存放字符串的内存首地址( 若一个字符也没有读入或有错误发生,函数返回值是 第 12章 文件 第 45页 例如: 0; 10, 表示从 个字符,在 9个字符的后面加一个字符串结束标志 0,存入数组 文件的读写 1 第 12章 文件 第 46页 文件的读写 2 以是字符串常量、字符串数组名或指向字符串的指针变量名。 包括字符串结束标志 0。 第 12章 文件 第 47页 例如: We , 表示将字符串“ We 写入 包括 0)。 =“ (或 ) 表示将 包括 0)。 2 第 12章 文件 第 48页 例 将字符串“ I (各单词间只有一个空格)写入 c:后将其中的“ 读取出来,显示在屏幕上。 # * a30; fp=c:w+); I , 2L, a, 12, %sn, a); ; 第 12章 文件 第 49页 程序设计举例 例 编程实现: ( 1)将若干名学生的学号、姓名、数学成绩、英语成绩、语文成绩存储在 c: ( 2)根据给定的学号,在文件 学成绩、英语成绩、语文成绩的值。 ( 3)在文件 加若干个学生的信息(每个学生包括学号、姓名、数学成绩、英语成绩、语文成绩 5个数据)。 ( 4)计算并显示每个学生的数学成绩、英语成绩、语文成绩的平均分。 第 12章 文件 第 50页 程序如下: # ; ; 第 12章 文件 第 51页 ) * ; /*(fp=c: w)=(t ); 1) 请按顺序输入学生的学号 ,数学成绩 ,英语成绩 ,语文成绩 ,姓

温馨提示

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

评论

0/150

提交评论