当前位置:首页 >> 其它技巧 >>

幻灯片-C语言程序设计视频教程--第13章_图文

C程序设计

第13章 文件
文件(file)是程序设计中一个重要的概念。所谓“文件”一般 指存储在外部介质上数据的集合。一批数据是以文件的形式存放 在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行 管理的,也就是说,如果想找存在外部介质上的数据,必须先按 文件名找到所指定的文件,然后再从该文件中读取数据。要向外 部介质上存储数据也必须先建立一个文件(以文件名标识),才能 向它输出数据。 以前各章中所用到的输入和输出,都是以终端为对象的,即 从终端键盘输入数据,运行结果输出到终端上。从操作系统的角 度看,每一个与主机相联的输入输出设备都看作是一个文件。例 如,终端键盘是输入文件,显示器和打印机是输出文件。

在程序运行时,常常需要将一些数据(运行的最终结果和中间 数据)输出到磁盘上存放起来,以后需要时再从磁盘中输入到计 算机内存。这就要用到磁盘文件。 C语言把文件看作是一个字符(字节)的序列,即一个一个字符 (字节)的数据顺序组成。根据数据的组织形式,可分为ASCII文 件和二进制文件。ASCII文件又称文本文件,它的每一个字节放 一个ASCII代码,代表一个字符。二进制文件是把内存中的数据 按其在内存中的存储形式原样输出到磁盘上存放。

由前所述,一个C文件是一个字节流或二进制流。它把数据 看作是一连串的字符(字节),而不考虑记录的界限。换句话说, C语言中文件并不是由记录(record)组成的(这是和PASCAL或其他 高级语言不同的)。在C语言中对文件的存取是以字符(字节)为单 位的。输入输出的数据流的开始和结束仅受程序控制而不受物理 符号(如回车换行符)控制。也就是说,在输出时不会自动增加回 车换行符以作为记录结束的标志,输入时不以回车换行符作为记 录的间隔(事实上C文件并不由记录构成)。把这种文件称为流式 文件。C语言允许对文件存取一个字符,这就增加了处理的灵活 性。

在过去使用的C版本(如UNIX系统下使用的C)有两种对文件的处理方法: 一种叫“缓冲文件系统”,一种叫“非缓冲文件系统”。所谓缓冲文件系统 是指系统自动地在内存中为每一个正在使用的文件名开辟一个缓冲区。从内 存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁 盘去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内 存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(给程 序变量)。缓冲区的大小由各个具体的C版本确定,一般为512字节。
输出文件缓冲区 程序数据区 输出 输出 磁盘 输入 输入 输入文件缓冲区

所谓“非缓冲文件系统”是指系统不自动开辟确定大小的缓冲区,而由 程序为每个文件设定缓冲区。 在UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统处 理二进制文件。用缓冲文件系统进行的输入输出又称为高级(或高层)磁盘输入 输出(高层I/O),用非缓冲文件系统进行的输入输出又称为低级(低层)输入输出 系统。ANSI C标准决定不采用非缓冲文件系统,而只采用缓冲文件系统。即 既用缓冲文件系统处理文本文件,也用它来处理二进制文件。也就是将缓冲 文件系统扩充为可以处理二进制文件。 在C语言中,没有输入输出语句,对文件的读写都是用库函数来实现的。 ANSI规定了标准输入输出函数,用它们对文件进行读写。

13.2 文件类型指针
缓冲文件系统中,关键的概念是“文件指针”。每 个被使用的文件都在内存中开辟一个区,用来存放文件 的有关信息(如文件的名字、文件状态及文件当前位置 等)。这些信息是保存在一个结构体变量中的。该结构 体类型是由系统定义的,取名为FILE。

13.3 文件的打开与关闭 13.3.1 文件的打开(fopen函数)
文件使用方式 含义

“r”(只读)
“w”(只写) “a”(追加) “rb”(只读) “wb”(只写) “ab”(追加) “r+”(读写) “w+”(读写) “a+”(读写) “rb+”(读写) “wb+”(读写) “ab+”(读写)

为输入打开一个文本文件
为输出打开一个文本文件 向文本文件尾增加数据 为输入打开一个二进制文件 为输出打开一个二进制文件 向二进制文件尾增加数据 为读/写打开一个文本文件 为读/写简历一个新的文本文件 为读/写打开一个文本文件 为读/写打开一个二进制文件 为读/写建立一个新的二进制文件 为读/写打开一个二进制文件

说明:

(1)用“r”方式打开的文件只能用于向计算机输入而不能用作向该文件输出数 据,而且该文件应该已经存在,不能用“r”方式打开一个并不存在的文件(即 输入文件),否则出错。 (2)用“w”方式打开的文件只能用于向该文件写数据(即输出文件),而不能用 来向计算机输入。如果原来不存在该文件,则在打开时新建立一个以指定的 名字命名的文件。如果原来已存在一个以该文件名命名的文件,则在打开时 将该文件删去,然后重新建立一个新文件。 (3)如果希望向文件末尾添加新的数据(不希望删除原有数据),则应该用“a”方 式打开。但此时该文件必须已存在,否则将得到出错信息。打开时,位置指 针移到文件末尾。 (4)用“r+”、“w+”、 “a+”方式打开的文件既可以用来输入数据,也可以用 来输出数据。用“r+”方式时该文件应该已经存在,以便能向计算机输入数据。 用“w+”方式则新建立一个文件,先向此文件写数据,然后可以读此文件中的 数据。用“a+”方式打开的文件,原来的文件不被删去,位置指针移到文件末 尾,可以添加,也可以读。

(5)如果不能实现“打开”的任务,fopen函数将会带回一个出错信息。出错的 原因可能是用“r”方式打开一个并不存在的文件;磁盘出故障;磁盘已满无法 建立新文件等。此时fopen函数将带回一个空指针值NULL。 (6)在向计算机输入文本文件时,将回车换行符转换为一个换行符,在输出时 把换行符转换成为回车和换行两个字符。在用二进制文件时,不进行这种转 换,在内存中的数据形式与输出到外部文件中的数据形式完全一致,一一对 应。 (7)在程序开始运行时,系统自动打开3个标准文件:标准输入、标准输出、标 准出错输出。这3个文件都与终端相联系。因此以前所用到的从终端输入或输 出都不需要打开终端文件。系统自动定义了3个文件指针stdin、stdout和stderr, 分别指向终端输入、终端输出和标准出错输出(也从终端输出)。如果程序中指 定要从stdin所指的文件输入数据,就是指从终端键盘输入数据。

13.3.2 文件的关闭(fclose函数)
在使用完一个文件后应该关闭它,以防止它再被误 用。“关闭”就是使文件指针变量不指向该文件,也就 是文件指针变量与文件“脱钩”,以后不能再通过该指 针对原来与其相联系的文件进行读写操作。除非再次打 开,使该指针变量重新指向该文件。

13.4 文件的读写 13.4.1 文本文件的读写
1、写字符函数fputc和读字符函数fgetc [例13.1]从键盘输入一些字符,逐个把它们送到磁盘上去, 直到输入一个“#”为止 [例13.2]将一个磁盘文件中的信息复制到另一个磁盘文件中 2、写字符串函数fputs和读字符串函数fgets [例13.3]将学生数据,由键盘输入并存储到磁盘文件中 [例13.4]从上例文件中读取学生数据,并显示在屏幕上 3、格式化写函数fprintf和格式化读函数fscanf [例13.5]将学生数据,由键盘输入并存储到磁盘文件中 [例13.6]从上例文件中读取学生数据,并显示在屏幕上

13.4.2 二进制文件的读写
1、fread函数和fwrite函数 [例13.7]从键盘输入4个学生数据,然后把它们转存 到磁盘文件上去,然后再从磁盘文件中一次性读入内存 并显示出来

13.5 文件的定位
文件中有一个位置指针,指向当前读写的位置。如 果顺序读写一个文件,每次读写一个字符,则读写完一 个字符后,该位置指针自动移动指向下一个字符位置。 如果想改变这样的规律,强制使位置指针指向其他指定 的位置,可以用后面介绍的有关函数。

13.5.1 rewind函数
rewind函数的作用是使位置指针重新返回文件的开 头,此函数没有返回值。 [例13.8]有一个磁盘文件,第一次将它的内容显示在屏 幕上,第二次把它复制到另一文件上

13.5.2 fseek函数和随机读写
对流式文件可以进行顺序读写,也可以进行随机读 写,关键在于控制文件的位置指针。如果位置指针是按 字节位置顺序移动的,就是顺序读写;如果能将位置指 针按需要移动到任意位置,就可以实现随机读写。所谓 随机读写,是指读写完上一个字符(字节)后,并不一定 要读写其后的字符(字节),而可以读写文件中任意位置 上所需要的字符(字节)。 用fseek函数可以实现改变文件的位置指针。 [例13.9]在磁盘文件上存有10个学生的数据。要求将 第1、3、5、7、9个学生数据输入计算机,并在屏幕上 显示出来

13.5.3 ftell函数
ftell函数的作用是得到流失文件中的当前位置,用相 对于文件开头的位移量来表示。由于文件中的位置指针 经常移动,往往不容易知道其当前位置。用ftell函数可 以得到当前位置。

13.6 出错的检测
13.6.1 ferror函数 13.6.2 clearerr函数

13.7 文件输入输出小结
分类 打开文件 关闭文件 文件定位 函数名 fopen() fclose() fseek() rewind() ftell() 文件读写 fgetc(), getc() fputc(), putc() fgets() fputs() getw() putw() fread() 功能 打开文件 关闭文件 改变文件位置指针的位置 使文件位置指针重新置于文件开头 返回文件位置指针的当前值 从指定文件取得一个字符 把字符输出到指定文件 从指定文件读取字符串 把字符串输出到指定文件 从指定文件读取一个字(int型) 把一个字(int型)输出到指定文件 从指定文件中读取数据项

fwrite()
fscanf() fprintf() 文件状态 feof() ferror() clearerr()

把数据项写到指定文件
从指定文件按格式输入数据 按指定格式将数据写到指定文件中 若到文件末尾,函数值为“真”(非0) 若对文件操作出错,函数值为“真”(非0) 使ferror和feof函数值置零

习题
13.4 从键盘输入一个字符串,将其中的小写字母全部转换成大 写字母,然后输出到一个磁盘文件“test”中保存。输入的字符 以“!”结束。 13.5 有两个磁盘文件“A”和“B”,各存放一行字母,今要求把 这两个文件中的信息合并(按字母顺序排列),输出到一个新文件 “C”中去。 13.6 有5个学生,每个学生有3门课程的成绩,从键盘输入学生 数据(包括学号,姓名,3门课程成绩),计算出平均成绩,将原 有数据和计算出的平均分存放在磁盘文件“stud”中。 13.7 将题13.6“stud”文件中的学生数据,按平均分进行排序处理, 将已排序的学生数据存入一个新文件“stu_sort”中。 13.8 将题13.7已排序的学生成绩文件进行插入处理。插入一个学 生的3门课程成绩,程序先计算新插入学生的平均成绩,然后将 它按成绩高低顺序插入,插入后建立一个新文件。


相关文章:
幻灯片-C语言程序设计视频教程第13章_图文.ppt
幻灯片-C语言程序设计视频教程第13章 - C程序设计 杨芸 468918387@qq.com 第13章 文件 文件(file)是程序设计中一个重要的概念。所谓“文件”一般 指存储在...
幻灯片-C语言程序设计视频教程-徐红波-第13章_图文.ppt
幻灯片-C语言程序设计视频教程-徐红波-第13章_计算机软件及应用_IT/计算机_专业资料。C程序设计讲师:徐红波 Email: x_h_b@tom.com 第13章 文件文件(file)是...
第13章文件《C语言程序设计》实验指导-PPT精品文档_图文.ppt
第13章文件《C语言程序设计》实验指导-PPT精品文档 - 第十三章 ? 主要内
幻灯片-C语言程序设计视频教程-徐红波-第6章_图文.ppt
幻灯片-C语言程序设计视频教程-徐红波-6章 - C程序设计 第6章 循环控制
C语言程序设计PPT课件第13章 文件操作-精品文档_图文.ppt
C语言程序设计PPT课件第13章 文件操作-精品文档 - 第13章 文件操作 本
幻灯片-C语言程序设计视频教程-徐红波-第3章 - 副本_图文.ppt
幻灯片-C语言程序设计视频教程-徐红波-3章 - 副本_院校资料_高等教育_教
C语言程序设计第十三章课件_图文.ppt
C语言程序设计第十三章课件_工学_高等教育_教育专区。苏小红 第13章 文件操作
C语言程序设计-第13章 文件_图文.ppt
C语言程序设计-第13章 文件_院校资料_高等教育_教育专区。湖南工学院C语言程序设计,陈香兰教授指导。 第13章 文件 所谓“文件”一般指存储在外部介质的数据的集合...
C语言程序设计第13章(文件)_图文.ppt
C语言程序设计第13章(文件) - 第十三章 文件 §13.1 C文件概述 文件
C语言程序设计第十三章课件解读_图文.ppt
C语言程序设计第十三章课件解读 - 第13章 文件操作 哈尔滨工业大学 计算机科
第13章 C语言程序设计_图文.ppt
第13章 C语言程序设计_其它_职业教育_教育专区。第13章 C语言程序设计 1
清华-谭浩强-C语言程序设计视频教程-第1章_图文.ppt
清华-谭浩强-C语言程序设计视频教程-第1_IT/计算机_专业资料。清华大学出版社-谭浩强(第二版) C程序设计讲师:徐红波 Email: x_h_b@tom.com 教材: 《C程序...
幻灯片-C语言程序设计精品教程-旺旺-第10章_图文.ppt
幻灯片-C语言程序设计精品教程-旺旺-10章 - 轻松学C语言,快乐有趣,在家
C语言程序设计_2 第13章 文件和IO函数_图文.ppt
C语言程序设计_2 第13章 文件和IO函数 - 第13章 文件与I/O函数 C
清华-谭浩强-C语言程序设计视频教程-第9章资料_图文.ppt
清华-谭浩强-C语言程序设计视频教程-第9章资料 - C程序设计 第9章 预处理命令 ANSI C标准规定可以在C源程序中加入一些“预处 理命令”,以改进程序设计环境,...
幻灯片-C语言程序设计-第2章.ppt_图文.ppt
幻灯片-C语言程序设计-2章.ppt - C程序设计 讲师:刘楠 Email:
清华-谭浩强-C语言程序设计视频教程-第2章_图文.ppt
清华-谭浩强-C语言程序设计视频教程-第2_IT/计算机_专业资料。清华大学出
清华-谭浩强-C语言程序设计视频教程-第7章_图文.ppt
清华-谭浩强-C语言程序设计视频教程-第7_计算机软件及应用_IT/计算机_专
清华-谭浩强-C语言程序设计视频教程-第2章_图文.ppt
清华-谭浩强-C语言程序设计视频教程-第2_计算机软件及应用_IT/计算机_专
C语言程序设计(第五版)-谭浩强_图文.ppt
搜试试 3 帮助 全部 DOC PPT TXT PDF XLS ...参考书 C语言程序设计教程 C高级实用程序设计 C程序...第11章 结构体与共用体 第12章 位运算 第13章 ...