第13章文件
1 第13章 文件
13.1文件概述 到目前为止,我们所编程序中的输入都来自 键盘,而输出都送到显示器,且程序所处理的数据 都是在内存中进行的,程序一旦运行结束,存放 在变量和数组中的数据都会消失。 这种数据处理方式有一些缺点: ■不利于大量数据复用、保存及交流; ■由于手工及慢速设备的IO,会延长程序的完 成周期
2 13.1 C文件概述 到目前为止,我们所编程序中的输入都来自 键盘,而输出都送到显示器,且程序所处理的数据 都是在内存中进行的,程序一旦运行结束,存放 在变量和数组中的数据都会消失。 这种数据处理方式有一些缺点: 不利于大量数据复用、保存及交流; 由于手工及慢速设备的I/O,会延长程序的完 成周期
解决问题的办法就是利用文件。程序中都从 文件中读入数据,而程序中输出的数据也都存放 到文件中去。 程序中大量的数据处理都必须利用文件进行。 因此,必须掌握如何使用文件的基本知识。 本章将介绍C语言中文件的IO处理方法及 相关的ⅣO函数的使用
3 解决问题的办法就是利用文件。程序中都从 文件中读入数据,而程序中输出的数据也都存放 到文件中去。 程序中大量的数据处理都必须利用文件进行。 因此,必须掌握如何使用文件的基本知识。 本章将介绍C语言中文件的 I/O 处理方法及 相关的 I/O 函数的使用
文件概念 可从各种不同的角度来认识文件: 般来说,文件是记录的集合,而一个记录 由若千字段组成,一个字段则是一串有意义的字 符。 磁盘文件 从文件的存储介质来看:1磁带文件等 顺序存取文件 从文件的组织形式来看1随机存取文件
4 1、 文件概念 可从各种不同的角度来认识文件 : 一般来说,文件是记录的集合,而一个记录 由若干字段组成,一个字段则是一串有意义的字 符。 从文件的存储介质来看: 从文件的组织形式来看: 磁盘文件 顺序存取文件 随机存取文件 磁带文件等
从文件的存取方式来看:顺序文件 索引文件 二进制文件 从文件的表示形式来看: 文本文件等 总之文件总是存储在外部存储介质上(例如 磁盘、磁带等),有一个名字以供识别。因此, 个文件实际上就是存储介质上的一片命名的存储区 城。至于这片存储区域在哪儿,是连续的还是分散 的,普通程序设计者不必关心。 文件有各种属性,基本的属性有只读、只写、 可读可写
5 从文件的存取方式来看: 顺序文件 索引文件 从文件的表示形式来看: 二进制文件 文本文件等 总之, 文件总是存储在外部存储介质上(例如 磁盘、磁带等),有一个名字以供识别。因此,一 个文件实际上就是存储介质上的一片命名的存储区 域。至于这片存储区域在哪儿,是连续的还是分散 的,普通程序设计者不必关心。 文件有各种属性,基本的属性有只读、只写、 可读可写
2、C文件系统 为给程序提供与设备无关的、统一的、方便的文 件ⅣO处理界面,C语言把计算机系统中的各种设备 都抽象成文件,如把键盘抽象成输入文件、把显示 器抽象成输出文件等。 设备都抽象成文件之后,程序便只与文件打交 道,而不必关心具体的设备。因此,程序中使用的 文件其实都是使用某种设备,C文件系统中的ⅣO函 数都是针对文件而言的
6 2、 C文件系统 为给程序提供与设备无关的、统一的、方便的文 件I/O处理界面,C语言把计算机系统中的各种设备 都抽象成文件,如把键盘抽象成输入文件、把显示 器抽象成输出文件等。 设备都抽象成文件之后,程序便只与文件打交 道,而不必关心具体的设备。因此,程序中使用的 文件其实都是使用某种设备,C文件系统中的I/O函 数都是针对文件而言的
3、ⅣO流概念( 7O stream) C语言把每一个文件都看成一个连续的、有序 的谓之“流”的字节序列,流中的每一个字节都可以 单独存取。每个文件都以一个特别的结束标志end of file marker简记为EOF)结束。 C文件系统支持兩种流: 文本流( (text stream) 二进制流( binary stream)
7 C 语言把每一个文件都看成一个连续的、有序 的谓之“流” 的字节序列, 流中的每一个字节都可以 单独存取。每个文件都以一个特别的结束标志(end of file marker 简记为EOF)结束。 C 文件系统支持两种流: 文本流 (text stream) 二进制流 (binary stream) 3、 I/O流概念 (I/O stream)
文本流 一种以行为单位组织的字符序列,行以特定字 符结束。不同系统的行结束符可能不同。 Windows、DOS环境中:rn(回车与换行组合) 其他系统环境中:r(单个回车符) C语言环境中:m(单个换行符) 因此,在C中读写文件时,C将根据所在环境进 行行结束符的转换,读取时将Ⅷrn或转换成n; 写入时将Ⅶ转换成rn或r
8 因此, 在C中读写文件时, C将根据所在环境进 行行结束符的转换,读取时将 \r\n 或 \r转换成 \n ; 写入时将 \n 转换成 \r\n 或 \r 。 文本流 Windows、DOS环境中:\r\n 其他系统环境中:\r (回车与换行组合) C语言环境中:\n 一种以行为单位组织的字符序列,行以特定字 符结束。不同系统的行结束符可能不同。 (单个回车符) (单个换行符)
二进制流 没有行概念的一种字节序列(注意区分“字 符”与“字节”的不同含义 C程序能够读/写流中的每一个字节(读写文 件的字节数与实际存储的字节数相等),不存在 任何字符变换。 一个文本文件也可以按二进制流方式处理。反 之,一个二进制文件也可以按文本流处理,但处 理效果极差。 通常文本文件用文本流处理,二进制文件用二 进制流处理
9 没有行概念的一种字节序列(注意区分“字 符”与“字节”的不同含义),。 C程序能够读/写流中的每一个字节(读写文 件的字节数与实际存储的字节数相等),不存在 任何字符变换。 一个文本文件也可以按二进制流方式处理。反 之,一个二进制文件也可以按文本流处理,但处 理效果极差。 通常文本文件用文本流处理,二进制文件用二 进制流处理。 二进制流
4、C语言ⅣO函数 C语言文件系统由若干O函数组成,可把ⅣO函 数分为三类: 第一类为标准设备ⅣO函数 (standard 1o 这是针对键盘和显示器的ⅣO函数 第二类为标准高级ⅣO函数( ( standard high-level 1O) 这类函数是针对磁盘文件或其他设备文件的, 它们面向用户或程序,可把这类函数看作为程序和 操作系统之间的一种ⅣO高级接 Gel vo 使用这类函数不必关心文件的处理细节,通常 将这类函数称为缓冲O函数( buffered vo)
10 第三类为低级I/O函数 第一类为标准设备I/O函数(standard I/O) C 语言文件系统由若干I/O函数组成,可把 I/O函 数分为三类: 第二类为标准高级I/O函数(standard high-level I/O) 4、 C 语言I/O函数 这是针对键盘和显示器的I/O函数 这类函数是针对磁盘文件或其他设备文件的 , 它们面向用户或程序, 可把这类函数看作为程序和 操作系统之间的一种I/O高级接口。 使用这类函数不必关心文件的处理细节, 通常 将这类函数称为缓冲I/O函数 (buffered I/O ) 。 (low-level I/O)