
C语言程序设计 赵晓阳
赵晓阳

第11章文件 ·山.1文件概述 ·11.2文件的打开与关闭 ·113文件的读写 ·114文件的定位与出错检测
第11章 文件 11.1 文件概述 11.2 文件的打开与关闭 11.3 文件的读写 11.4 文件的定位与出错检测

11.1文件概述 ·11.1.1文件的分类 ·C语言把文件看作是一个字符(字节)序列,即由一个一个字符(字节)的 数据顺序组成。根据数据的组织形式,可分为文本文件和二进制文 件。 ·1.文本文件 ·文本文件的每一个字节放一个ASCII码,代表一个字符。文本文件的 输出与字符一一对应,一个字节代表一个字符(例如一个整数10000占 用5个字节),因此便于对字符进行逐个处理,也便于输出字符。 下一页返回
11.1 文件概述 11.1.1 文件的分类 C语言把文件看作是一个字符(字节)序列,即由一个一个字符(字节)的 数据顺序组成。根据数据的组织形式,可分为文本文件和二进制文 件。 1.文本文件 文本文件的每一个字节放一个ASCII码,代表一个字符。文本文件的 输出与字符一一对应,一个字节代表一个字符(例如一个整数10 000占 用5个字节),因此便于对字符进行逐个处理,也便于输出字符。 下一页 返回

11.1文件概述 ·文本文件由文本行组成,每一行中可以有0个或多个字符,并以换行 符八n'结尾,文本结束标志是oXA。在用文本文件向计算机输入时, 将回车换行符(八r或八n)转换成一个换行符(\n'),在输出时把 换行符转换成为回车和换行两个字符。如输入: ·abcd ·efgh ·存储在文本文件后(输入时是回车和换行两个字符),第7个字符是f而 不是e。 2.二进制文件 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁 盘上存放,一个字节并不对应一个字符(例如一个整数10000占用两个 字节),不能直接输出字符形式。 上一页下一页返回
11.1 文件概述 文本文件由文本行组成,每一行中可以有0个或多个字符,并以换行 符‘\n’结尾,文本结束标志是0X1A。在用文本文件向计算机输入时, 将回车换行符(‘\r’或‘\n’)转换成一个换行符(‘\n’),在输出时把 换行符转换成为回车和换行两个字符。如输入: abcd efgh 存储在文本文件后(输入时是回车和换行两个字符),第7个字符是f而 不是e。 2.二进制文件 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁 盘上存放,一个字节并不对应一个字符(例如一个整数10 000占用两个 字节),不能直接输出字符形式。 上一页 下一页 返回

11.1文件概述 ·11.1.2文件类型指针 ·C语言规定文件类型是一种特殊的“结构体型”,该结构体型中的成 员记录了处理文件时所需的信息。该结构体型已在头文件“stdio.h” 中按下列格式进行了定义: ·typedefstruct ·{int_fd;/*文件代号*/ ·int_cleft;/*文件缓冲区所剩余的字节数*/ ·int_mode;/*文件操作模式*/ ·char*nextc;/*下一个待处理字节的地址*/ ·char*buff;/*文件缓冲区首地址*/ ·}FILE; 上一页下一页返回
11.1 文件概述 11.1.2 文件类型指针 C语言规定文件类型是一种特殊的“结构体型”,该结构体型中的成 员记录了处理文件时所需的信息。该结构体型已在头文件“stdio.h” 中按下列格式进行了定义: typedef struct { int _fd; /*文件代号*/ int_cleft;/*文件缓冲区所剩余的字节数*/ int_mode;/*文件操作模式*/ char*nextc;/*下一个待处理字节的地址*/ char*buff;/*文件缓冲区首地址*/ }FILE; 上一页 下一页 返回

11.1文件概述 ·用户可以直接使用这个类型名“℉LE”来定义这种结构体型的指针变 量,并通过它来处理文件。用“FILE”定义的指针变量通常称为“文 件类型指针”。 ·文件类型指针定义的一般形式为: 。ILE*文件指针名1,*文件指针名2, ·其中,文件指针名是用户选取的标识符。 ·注意:使用“FLE”定义文件指针,必须在程序的开头要有编译预处 理命令: #include stdio.h" ·因为文件结构体型是在“stdio.h”中定义的。 上一页下一页返回
11.1 文件概述 用户可以直接使用这个类型名“FILE”来定义这种结构体型的指针变 量,并通过它来处理文件。用“FILE”定义的指针变量通常称为“文 件类型指针” 。 文件类型指针定义的一般形式为: FILE *文件指针名1, *文件指针名2,……; 其中,文件指针名是用户选取的标识符。 注意:使用“FILE”定义文件指针,必须在程序的开头要有编译预处 理命令: #include ″stdio.h″ 因为文件结构体型是在“stdio.h”中定义的。 上一页 下一页 返回

11.1文件概述 ·1113设备文件 ·在C语言中把所有的外部设备都作为文件对待,这样的文件称为设备 文件。例如把打印机作为设备文件时,由系统命名为PN文件。向 PRN文件输出数据,就是向打印机输出打印数据。C语言中常用的标 准设备文件名如下: ·CON:或KYBD:键盘。 ·CON:或SCRN:显示器。 ·PRN:或LPT:打印机。 上一页下一页返回
11.1 文件概述 11.1.3 设备文件 在C语言中把所有的外部设备都作为文件对待,这样的文件称为设备 文件。例如把打印机作为设备文件时,由系统命名为PRN文件。向 PRN文件输出数据,就是向打印机输出打印数据。C语言中常用的标 准设备文件名如下: CON:或KYBD:键盘。 CON:或SCRN:显示器。 PRN:或LPT1:打印机。 上一页 下一页 返回

11.1文件概述 ·AUX:或COM1:异步通信口。 ·另外有3个标准设备文件的文件结构体指针也是由系统命名的,如下 所示: ·stdin:标准输入文件结构指针(由系统分配为键盘)。 ·stdout:标准输出文件结构体指针(由系统分配为显示器)。 ·stderr:标准错误输出文件结构体指针(由系统分配为显示器)。 上一页下一页返回
11.1 文件概述 AUX:或COM1:异步通信口。 另外有3个标准设备文件的文件结构体指针也是由系统命名的,如下 所示: stdin:标准输入文件结构指针(由系统分配为键盘)。 stdout:标准输出文件结构体指针(由系统分配为显示器)。 stderr:标准错误输出文件结构体指针(由系统分配为显示器)。 上一页 下一页 返回

11.1文件概述 ·11.1.4流 ·一个C文件可以形象地被看作是一个字节流或二进制流。流是程序输 入或输出的一个连续的数据序列,设备(如键盘、磁盘、屏幕和打印机 等)的输入输出都是用流来处理的。在C语言中,所有的流均以文件的 形式出现,包括设备文件。流实际上是文件输入输出的一种动态形 式。 ·在C语言中对文件的存取是以字符(字节)为单位的。输入输出的数 据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控 制。也就是说,在输出时不会自动增加回车换行符以作为记录结束的 标志,输入时不以回车换行符作为记录的间隔。我们把这种文件称为 流式文件。C语言允许对文件存取一个字符,这就增加了处理的灵活 性。 上一页返回
11.1 文件概述 11.1.4 流 一个C文件可以形象地被看作是一个字节流或二进制流。流是程序输 入或输出的一个连续的数据序列,设备(如键盘、磁盘、屏幕和打印机 等)的输入输出都是用流来处理的。在C语言中,所有的流均以文件的 形式出现,包括设备文件。流实际上是文件输入输出的一种动态形 式。 在C语言中对文件的存取是以字符(字节)为单位的。输入输出的数 据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控 制。也就是说,在输出时不会自动增加回车换行符以作为记录结束的 标志,输入时不以回车换行符作为记录的间隔。我们把这种文件称为 流式文件。C语言允许对文件存取一个字符,这就增加了处理的灵活 性。 上一页 返回

11.2文件的打开与关闭 ·和其他高级语言一样,对文件读写前应该先“打开”该文件,在结束 后应“关闭”该文件。C语言中文件的打开与关闭是通过系统函数 fopen()和fclose(0来实现的。这两个系统函数均包含在头文件 “stdio.h'中。 ·11.2.1文件的打开 ·打开文件函数的一般格式为: 。FILE*fp; ·fp=fopent(文件名,使用文件方式): 下一页返回
11.2 文件的打开与关闭 和其他高级语言一样,对文件读写前应该先“打开”该文件,在结束 后应“关闭”该文件。C语言中文件的打开与关闭是通过系统函数 fopen()和fclose()来实现的。这两个系统函数均包含在头文件 “stdio.h”中。 11.2.1 文件的打开 打开文件函数的一般格式为: FILE*fp; fp=fopen(文件名,使用文件方式); 下一页 返回