第12章文件 在程序运行时,程序本身和数据一般都存放在内存中。 当程序运行结束后,存放在内存中的数据被释放 如果需要长期保存程序运行所需的原始数据,或程序运 行产生的结果,就必须以文件形式存储到外部存储介质上 12.1C语言文件概述 122文件的打开与关闭 123文件的读写操作 124位置指针与文件定位 125出错检测 ReturnI
第12章 文 件 在程序运行时,程序本身和数据一般都存放在内存中。 当程序运行结束后,存放在内存中的数据被释放。 如果需要长期保存程序运行所需的原始数据,或程序运 行产生的结果,就必须以文件形式存储到外部存储介质上。 12.1 C语言文件概述 12.2 文件的打开与关闭 12.3 文件的读写操作 12.4 位置指针与文件定位 12.5 出错检测 [Return]
121C语言文件概述 1.文件与文件名 文件是指存放在外部存储介质上的数据集合。 为标识一个文件,每个文件都必须有一个文件名, 其一般结构为:主文件名扩展名 文件命名规则,遵循操作系统的约定。 2.文件分类 可以从不同的角度对文件进行分类: 1)根据文件的内容,可分为程序文件和数据文件, 程序文件又可分为源文件、目标文件和可执行文件, (2)根据文件的组织形式,可分为顺序存取文件和 随机存取文件
12.1 C语言文件概述 1.文件与文件名 文件是指存放在外部存储介质上的数据集合。 为标识一个文件,每个文件都必须有一个文件名, 其一般结构为:主文件名[.扩展名] 文件命名规则,遵循操作系统的约定。 2.文件分类 可以从不同的角度对文件进行分类: (1)根据文件的内容,可分为程序文件和数据文件, 程序文件又可分为源文件、目标文件和可执行文件。 (2)根据文件的组织形式,可分为顺序存取文件和 随机存取文件
(3)根据文件的存储形式,可分为ASCI码文件和二 进制文件 ASCI码文件的每1个字节存储1个字符,因而便于对 字符进行逐个处理。但一般占用存储空间较多,而且要花 费转换时间(二进制与ASCI码之间的转换)。 二进制文件是把内存中的数据,原样输出到磁盘文件 中。可以节省存储空间和转换时间,但1个字节并不对应1 个字符,不能直接输出字符形式。 3.读文件与写文件 所谓读文件是指,将磁盘文件中的数据传送到计算机 内存的操作。 所谓写文件是指,从计算机内存向磁盘文件中传送数 据的操作
(3)根据文件的存储形式,可分为ASCII码文件和二 进制文件。 ASCII码文件的每1个字节存储1个字符,因而便于对 字符进行逐个处理。但一般占用存储空间较多,而且要花 费转换时间(二进制与ASCII码之间的转换)。 二进制文件是把内存中的数据,原样输出到磁盘文件 中。可以节省存储空间和转换时间,但1个字节并不对应1 个字符,不能直接输出字符形式。 3.读文件与写文件 所谓读文件是指,将磁盘文件中的数据传送到计算机 内存的操作。 所谓写文件是指,从计算机内存向磁盘文件中传送数 据的操作
构成文件的基本单元与流式文件 C语言将文件看作是由一个一个的字符(ASCI码文 件)或字节(二进制文件)组成的。将这种文件称为流式 文件 而在其它高级语言中,组成文件的基本单位是记录 对文件操作的基本单位也是记录 5.文件类型FILE 系统给每个打开的文件都在内存中开辟一个区域,用 于存放文件的有关信息(如文件名、文件位置等)。这些 信息保存在一个结构类型变量中,该结构类型由系统定义 取名为FIE。 注意:结构类型名“FILE”必须大写
4.构成文件的基本单元与流式文件 C语言将文件看作是由一个一个的字符(ASCII码文 件)或字节(二进制文件)组成的。将这种文件称为流式 文件。 而在其它高级语言中,组成文件的基本单位是记录, 对文件操作的基本单位也是记录。 5.文件类型FILE 系统给每个打开的文件都在内存中开辟一个区域,用 于存放文件的有关信息(如文件名、文件位置等)。这些 信息保存在一个结构类型变量中,该结构类型由系统定义、 取名为FILE。 注意:结构类型名“FILE”必须大写
6. ANSI C的缓冲文件系统 所谓缓冲文件系统是指,系统自动地在内存区为每 个正在使用的文件开辟一个缓冲区 从内存向磁盘输出数据时,必须首先输出到缓冲区 中。待缓冲区装满后,再一起输出到磁盘文件中 从磁盘文件向内存读入数据时,则正好相反:首先 将一批数据读入到缓冲区中,再从缓冲区中将数据逐个 送到程序数据区。 Return
6.ANSI C的缓冲文件系统 所谓缓冲文件系统是指,系统自动地在内存区为每 个正在使用的文件开辟一个缓冲区。 从内存向磁盘输出数据时,必须首先输出到缓冲区 中。待缓冲区装满后,再一起输出到磁盘文件中。 从磁盘文件向内存读入数据时,则正好相反:首先 将一批数据读入到缓冲区中,再从缓冲区中将数据逐个 送到程序数据区。 [Return]
122文件的打开与关闭 对文件进行操作之前,必须先打开该文件;使用结 束后,应立即关闭,以免数据丢失。 C语言规定了标准输入输出函数库,用 fopen函数 打开一个文件,用 fclose函数关闭一个文件。 1221文件的打开— fopen(函数 1.用法:FIE* fopen("文件名","操作方式"); 2.功能:返回一个指向指定文件的指针 3.函数原型: stdio h。 注:对文件操作的库函数,函数原型均在头文件 stdio. hl中。后续函数不再赘述
12.2 文件的打开与关闭 对文件进行操作之前,必须先打开该文件;使用结 束后,应立即关闭,以免数据丢失。 C语言规定了标准输入输出函数库,用fopen()函数 打开一个文件,用fclose()函数关闭一个文件。 12.2.1 文件的打开──fopen()函数 1.用法: FILE *fopen("文件名" , "操作方式"); 2.功能:返回一个指向指定文件的指针。 3.函数原型:stdio.h 。 注:对文件操作的库函数,函数原型均在头文件 stdio.h中。后续函数不再赘述
(1)“文件名”是指要打开(或创建)的文件名 如果使用字符数组(或字符指针),则不使用双引号 (2)“操作方式”如表12-1所示 例如,FILE*fp fp=fopen(data.99",r) 3.说明 1)如果不能实现打开指定文件的操作,则 fopen( 函数返回一个空指针NULL(其值在头文件 stdio. h中被定 义为0)。 为增强程序的可靠性,常用下面的方法打开一个文件: if(fp= =fopen("文件名","操作方式")=NULL) i printf("can not open this filein"); exit(O)
(1)“文件名”是指要打开(或创建)的文件名。 如果使用字符数组(或字符指针),则不使用双引号。 (2)“操作方式”如表12-1所示。 例如,FILE *fp; fp=fopen("data.99" ,"r"); 3.说明 (1)如果不能实现打开指定文件的操作,则fopen() 函数返回一个空指针NULL (其值在头文件stdio.h中被定 义为0)。 为增强程序的可靠性,常用下面的方法打开一个文件: if((fp=fopen("文件名","操作方式"))==NULL) { printf("can not open this file\n"); exit(0); }
●关于ex0函数 1)用法: void exit(程序状态值) 2)功能:关闭已打开的所有文件,结束程序运行, 返回操作系统,并将“程序状态值”返回给操作系统。 当“程序状态值”为0时,表示程序正常退出;非0值 时,表示程序出错退出。 (2)“r(b)+与“a(b)+”的区别:使用前者打开 文件时,读写位置指针指向文件头;使用后者时,读写 指针指向文件尾 (3)使用文本文件向计算机系统输入数据时,系统 自动将回车换行符转换成一个换行符;在输出时,将换 行符转换成回车和换行两个字符
●关于exit()函数 1)用法:void exit([程序状态值]); 2)功能:关闭已打开的所有文件,结束程序运行, 返回操作系统,并将“程序状态值”返回给操作系统。 当“程序状态值”为0时,表示程序正常退出;非0值 时,表示程序出错退出。 (2)“ r(b)+”与“ a(b)+”的区别:使用前者打开 文件时,读写位置指针指向文件头;使用后者时,读写 指针指向文件尾。 (3)使用文本文件向计算机系统输入数据时,系统 自动将回车换行符转换成一个换行符;在输出时,将换 行符转换成回车和换行两个字符
使用二进制文件时,内存中的数据形式与数据文 件中的形式完全一样,就不再进行转换 (4)有些C编译系统,可能并不完全提供上述对 文件的操作方式,或采用的表示符号不同,请注意所 使用系统的规定 (5)在程序开始运行时,系统自动打开三个标准 文件,并分别定义了文件指针: 1)标准输入文件— stdin:指向终端输入(一般 为键盘)。如果程序中指定要从 stdin所指的文件输入 数据,就是从终端键盘上输入数据
使用二进制文件时,内存中的数据形式与数据文 件中的形式完全一样,就不再进行转换。 (4)有些C编译系统,可能并不完全提供上述对 文件的操作方式,或采用的表示符号不同,请注意所 使用系统的规定。 (5)在程序开始运行时,系统自动打开三个标准 文件,并分别定义了文件指针: 1)标准输入文件——stdin:指向终端输入(一般 为键盘)。如果程序中指定要从stdin所指的文件输入 数据,就是从终端键盘上输入数据
2)标准输出文件— stdout:指向终端输出(一般为 显示器)。 3)标准错误文件— stderr:指向终端标准错误输出 般为显示器) 1222文件的关闭— colse函数 1.用法: int fclose(FIE*件指针); 2.功能:关闭“文件指针”所指向的文件。如果正 常关闭了文件,则函数返回值为0;否则,返回值为非0。 例如, fclose((fp):/*关闭印所指向的文件* REturn
2)标准输出文件——stdout:指向终端输出(一般为 显示器)。 3)标准错误文件——stderr:指向终端标准错误输出 (一般为显示器)。 12.2.2 文件的关闭──fcolse()函数 1.用法: int fclose(FILE *文件指针); 2.功能:关闭“文件指针”所指向的文件。如果正 常关闭了文件,则函数返回值为0;否则,返回值为非0。 例如,fclose(fp);/*关闭fp所指向的文件*/ [Return]