§6.2文件类型指针 (第6章文件) 、文件指针 要调用磁盘上的一个文件时,必须知道与该文件有关的信息。比如文件名、 文件的当前读写位置、文件缓冲区大小与位置、文件的操作方式等。这些信息 被C语言系统保存在一个称作FILE的结构体中,它在 stdio.h头文件中定义内。 FILE结构体的内容为(在使用文件操作时,一般不用关心FILE内部成员信息): typedef struct I int level /*缓冲区“满”或“空”的程度*/ unsigned flags /米文件状态标志 char fd /*文件描述符* unsigned char hold: /*如无缓冲区不读取字符* int bsize: /*缓冲区大小*/ unsigned char* buffer;/米数据缓冲区位置* unsigned char *curp /*文件定位指针* unsigned 1 stemp /*临时文件指示器*/ short token /*用于有效性检查*/ FFILE 坛htp/www.elecfans.com电子发 6/31
http://bbs.elecfans.com 电子技术论 坛 http://www.elecfans.com 电子发 烧友 一、文件指针 6 / 31 要调用磁盘上的一个文件时,必须知道与该文件有关的信息。比如文件名、 文件的当前读写位置、文件缓冲区大小与位置、文件的操作方式等。这些信息 被C语言系统保存在一个称作FILE的结构体中,它在stdio.h头文件中定义内。 FILE结构体的内容为(在使用文件操作时,一般不用关心FILE内部成员信息): typedef struct { int level; /*缓冲区“满”或“空”的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读取字符*/ int bsize; /*缓冲区大小*/ unsigned char *buffer; /*数据缓冲区位置*/ unsigned char *curp; /*文件定位指针*/ unsigned istemp; /*临时文件指示器*/ short token; /*用于有效性检查*/ }FILE; (第6章 文 件) §6.2 文件类型指针
§6.2文件类型指针 (第6章文件) 文件指针(续) 有了结构体FILE类型后,可以用它来定义若干个FILE类型的变量,以便存放 若干个文件的信息。如:FIEf[5];定义了一个结构体数组f,它有5个元素 可以用来存放5个文件的信息。 对于每一个要操作的文件,都必须定乂一个指针变量,并使它指向该文件结 构体变量,这个指针称为文件指针。通过文件指针找到被操作文件的描述信息, 就可对它所指的文件进行各种操作。定义文件指针的一般形式为: FILE*指针变量标识符 如:FIE*fp;表示fp是一个指向FILE类型结构体的指针变量。可以使f指 向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该 文件。 如果有n个文件,一般应定义n个FILE类型的指针变量,使它们分别指向n个 文件所对应的结构体变量。 如:FILE*fp1,*fp2,*fp2,*fp4;可以处理4个文件 注意:FIE是用 typedef声明的文件信息结构体的别名,由C系统定义,用 户只能使用,不能修改,并且FILE必须大写 坛htp/www.elecfans.com电子发 7/31
http://bbs.elecfans.com 电子技术论 坛 http://www.elecfans.com 电子发 烧友 文件指针(续): 7 / 31 有了结构体FILE类型后,可以用它来定义若干个FILE类型的变量,以便存放 若干个文件的信息。如:FILE f[5]; 定义了一个结构体数组f,它有5个元素 可以用来存放5个文件的信息。 对于每一个要操作的文件,都必须定义一个指针变量,并使它指向该文件结 构体变量,这个指针称为文件指针。通过文件指针找到被操作文件的描述信息, 就可对它所指的文件进行各种操作。定义文件指针的一般形式为: FILE * 指针变量标识符; 如:FILE *fp; 表示fp是一个指向FILE类型结构体的指针变量。可以使fp指 向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该 文件。 如果有n个文件,一般应定义n个FILE类型的指针变量,使它们分别指向n个 文件所对应的结构体变量。 如:FILE *fp1 , *fp2 , *fp2 , *fp4; 可以处理4个文件。 注意:FILE是用typedef声明的文件信息结构体的别名,由C系统定义,用 户只能使用,不能修改,并且FILE必须大写。 (第6章 文 件) §6.2 文件类型指针
§6.3文件操作的相关函数 (第6章文件) 对文件的操作一般步骤包括:打开文件、读或写文件、关闭文件。在C语言 中,文件操作都是由库函数来完成的。这些库函数包含在 stdio.h头文件中。 、文件的打开与关闭 所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文 件,以便进行其它各种操作。关闭文件则是断开指针与文件之间的联系,也就 禁止再对该文件进行操作, 1、文件的打开( fopen函数 ANSIC规定了标准输入输岀函数库,用 fopen(函数来实现打开文件。 fopen 函数的原型为:FILE* fopen(char*fi1 ename,char*mode 其中参数 filename表示一个文件名,是用双引号括起来的字符串,这个字符串 可以是一个合法的带有路径的文件名。参数mode表示对文件的操作模式,mode 的值仍需要用双引号括起来,mode的取值及其含义详见教P×××的表6.1。 如:FIEL*fpl;fpl- fopen(test.c”,”"r3);表示是在当前目录下打开文件 test.C,只允许进行“读”操作,并使fp指向该文件 再如:FIEL*fp2;fp2= fopen(c:\ tt\test.exe”,”rb”);表示打开C盘下 tt目录中的test.exe文件,是二进制文件,只允许按二进制方式进行读操作。 3鼬;es粤术詮εε8888脂 坛htp/www.elecfans.com电子发 8/31
http://bbs.elecfans.com 电子技术论 坛 http://www.elecfans.com 电子发 烧友 (第6章 文 件) 8 / 31 对文件的操作一般步骤包括:打开文件、读或写文件、关闭文件。在C语言 中,文件操作都是由库函数来完成的。这些库函数包含在stdio.h头文件中。 一、文件的打开与关闭 所谓打开文件,实际上是建立文件的各种有关信息,并使文件指针指向该文 件,以便进行其它各种操作。关闭文件则是断开指针与文件之间的联系,也就 禁止再对该文件进行操作。 1、文件的打开(fopen函数) ANSIC规定了标准输入输出函数库,用fopen()函数来实现打开文件。fopen 函数的原型为: FILE *fopen(char *filename,char *mode) 其中参数filename表示一个文件名,是用双引号括起来的字符串,这个字符串 可以是一个合法的带有路径的文件名。参数mode表示对文件的操作模式,mode 的值仍需要用双引号括起来,mode的取值及其含义详见教材P×××的表6.1。 如:FIEL *fp1; fp1=fopen(“test.c” , ”r”); 表示是在当前目录下打开文件 test.c,只允许进行“读”操作,并使fp指向该文件。 再如:FIEL *fp2; fp2=fopen(“c:\\tt\\test.exe” , ”rb”); 表示打开C盘下 tt目录中的test.exe文件,是二进制文件,只允许按二进制方式进行读操作。 §6.3 文件操作的相关函数
§6.3文件操作的相关函数 (第6章文件) 文件使用方式及其意义 ASCII 只读 r 打开一个已经存在的文本文件 文件只写 建立并打开一个文本文件 操作 追加 a 打开或建立一个文本文件,在末尾写入 二进制匚只读打开一个已经存在的三进制文件 文件|只写 b建立并打开一个二进制文件 操作 追加 ab打开或建立一个二进制文件,在末尾写入 ASCII 读写r+打开一个已经存在的文本文件 文件读写w+建立并打开一个文本文件 操作读写a打开或建立一个文本文件,在末尾写入 二进制 读写tb+打开一个已经存在的二进制文件 文件读写wb+建立并打开一个三进制文件 操作读写十ab+打开或建立一个三进制文件,在末尾写入 3ε/咔印sq嘟术診888εεε8量量 坛htp/www.elecfans.com电子发 9/31
http://bbs.elecfans.com 电子技术论 坛 http://www.elecfans.com 电子发 烧友 文件使用方式及其意义 9 / 31 (第6章 文 件) ASCII 文件 操作 ASCII 文件 操作 二进制 文件 操作 二进制 文件 操作 只读 只读 只写 追加 只写 追加 读写 读写 读写 读写 读写 读写 r w a r+ w+ a+ rb wb ab rb+ wb+ ab+ 打开一个已经存在的文本文件 打开一个已经存在的二进制文件 建立并打开一个文本文件 打开或建立一个文本文件,在末尾写入 建立并打开一个二进制文件 打开或建立一个二进制文件,在末尾写入 打开一个已经存在的文本文件 打开一个已经存在的二进制文件 建立并打开一个文本文件 打开或建立一个文本文件,在末尾写入 建立并打开一个二进制文件 打开或建立一个二进制文件,在末尾写入 §6.3 文件操作的相关函数
§6.3文件操作的相关函数 (第6章文件) 2、文件的关闭 fclose函数) colse函数的原型为: int fclose(FIle*fp) 功能:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针。 返回值:关闭成功时返回0。否则(如磁# include <stdio. h> 盘空间不足、写保护或关闭已经关闭的文 mainO 件)返回EOF,即-1。 R FILE fp; 特别注意,文件使用完后,一定要关闭fp= -fopen(“ 'test. txt?,w”); 文件,否则可能丢失数据。因为在关闭之if(fp=NULL) 前,首先将缓冲区的数据输出到磁盘文件{ printf("file open error!in”); 中,然后再释放文件指针变量。 exit(0);/终止程序 程序中的exit函数原型为: void exit(int status) else 功能:终止程序。它将 status的值发送给{ printf(file open OK!m); D0S环境变量。它在 stdlib.h中声明。 fclose(tp); 坛htp/www.elecfans.com电子发 10/31
http://bbs.elecfans.com 电子技术论 坛 http://www.elecfans.com 电子发 烧友 2、文件的关闭(fclose函数) 10 / 31 fcolse函数的原型为: int fclose(FILE *fp) 功能:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针。 (第6章 文 件) #include <stdio.h> main() { FILE * fp; fp=fopen(“test.txt”,”w”); if (fp==NULL) { printf(“file open error! \n”); exit(0); /*终止程序*/ } else { printf(“file open OK! \n); fclose(fp); } } 返回值:关闭成功时返回0。否则(如磁 盘空间不足、写保护或关闭已经关闭的文 件)返回EOF,即-1。 特别注意,文件使用完后,一定要关闭 文件,否则可能丢失数据。因为在关闭之 前,首先将缓冲区的数据输出到磁盘文件 中,然后再释放文件指针变量。 程序中的exit函数原型为: void exit(int status) 功能:终止程序。它将status的值发送给 DOS环境变量。它在stdlib.h中声明。 §6.3 文件操作的相关函数