资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,第10章 文件,C 语言程序设计,2019/7/11,2,10.1 C文件概述 10.2 文件类型指针 10.3 文件的打开与关闭 10.4 文件的读/写 10.5 文件的定位 10.6 文件检测函数,第10章 文件,2019/7/11,3,10.1 C文件概述,所谓文件,一般指记录在外部介质上的数据的集合。文件是操作系统管理数据的单位,也就是说如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。 在C语言中文件的含义更为广泛,包含磁盘文件和设备文件。如键盘常称为标准输入文件,显示器称为标准输出文件。 根据文件内数据的组织形式,文件可分为文本文件(也称为ASCII码文件)和二进制码文件两种。,2019/7/11,4,10.1 C文件概述,ASCII码文件的每一个字节放一个ASCII代码,代表一个字符,这样便于对字符进行逐个处理,也便于输出字符。 二进制文件是按二进制的编码方式来存放文件的。用二进制形式输出数值,可以节省外存空间和转换时间。 C语言使用的磁盘文件系统有两种:缓冲文件系统和非缓冲文件系统。,返回,2019/7/11,5,10.2 文件类型指针,缓冲文件系统中,关键的概念是文件指针,每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息,这些信息是保存在一个结构体变量中的,该结构体类型是由系统定义的,取名为FILE。,2019/7/11,6,10.2 文件类型指针,Turbo C在stdio.h文件中有如下的定义: typedef struct short level; /*缓冲区“满”/“空”的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读取字符*/ short bsize; /*缓冲区的大小*/ unsigned char *buffer; /*数据缓冲区的位置*/ unsigned char *curp; /*当前工作指针*/ unsigned istemp; /*临时文件,批示器*/ short token; /*用于有效性检查*/ FILE;,2019/7/11,7,10.2 文件类型指针,定义的结构体类型的类型名是FILE。有了结构体类型FILE之后,可以用它来定义多个FILE类型的变量,以便存放若干个文件的信息,如:FILE a10; 定义了一个结构体数组a,可以用来存放10个文件的信息。 在语言中用一个指针变量指向一个文件,这个指针称为文件型指针。,2019/7/11,8,10.2 文件类型指针,定义文件型指针变量的一般形式: 其中FILE应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心FILE结构的细节。 例如:FILE *fp; fp是指向FILE结构的指针变量,通过fp即可找存放某个文件信息的结构变量,然后按结构变量提供的信息找到该文件,实施对文件的操作。,FILE *文件型指针变量名;,返回,2019/7/11,9,10.3 文件的打开与关闭,10.3.1 文件的打开 10.3.2 文件的关闭,返回,2019/7/11,10,C语言用fopen函数打开一个文件,其调用的一般形式: 其中,“文件指针名”必须是被说明为FILE 类型的指针型变量,“文件名”是被打开文件的文件名,“使用文件方式”是指文件的类型和操作要求。 例如: FILE *fp; fp=fopen(“name1“,“r“);,10.3.1 文件的打开,文件指针名=fopen(文件名,使用文件方式);,2019/7/11,11,10.3.1 文件的打开,指在当前目录下打开文件mane1,只允许进行“读”操作(r代表read,即读入),并使fp指向该文件。打开一个文件时,通知给编译系统以下3个信息:需要打开的文件、使用文件的方式、让某个指针变量指向被打开的文件。 又如:FILE *fp; fp=(“c:file1“,“rb“) 指打开C磁盘的根目录下的文件file1,这是一个二进制文件,只允许按二进制方式进行读操作。 使用文件的方式共有12种,它们的符号和意义。请见教材中的表10-1。,2019/7/11,12,10.3.1 文件的打开,文件使用方式: 1)文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是: r(read): 读 w(write): 写 a(append): 追加 t(text): 文本文件 b(banary): 二进制文件 +: 读和写 2)凡用“r”打开一个文件时,该文件必须已经存在,且只能用于向计算机输入而不能用作向该文件输出数据。,2019/7/11,13,10.3.1 文件的打开,3)用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。 4)若希望向一个已存在的文件尾部添加新数据,应该用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。打开时,位置指针移到文件末尾。 5)用“r+”、“w+”、“a+”方式打开的文件可以用来输入输出数据。使用“r+”方式打开文件时,该文件应该已经存在。“w+”方式则新建立一个文件,先向此文件中写数据,然后可以读取该文件中的数据。用,2019/7/11,14,10.3.1 文件的打开,“a+”方式打开的文件,原来的文件不被删去,位置指针移到文件末尾,可以进行添加或读操作。 6)打开一个文件时,如果出错,fopen将返回一个空指针值NULL。常用以下程序段打开文件: if(fp=fopen(“c:f1“,“r“)=NULL) printf(“error on open c:f1 file!n“); exit(0); 7)标准输入文件,标准输出文件,标准出错输出(出错信息)是由系统打开的,可直接使用。,2019/7/11,15,10.3.2 文件的关闭(fclose函数),关闭就是使文件指针变量不再指向该文件。用fclose函数关闭文件,fclose函数调用的一般形式: 例如: fclose(fp); 关闭打开的文件,即fp不再指向该文件。 程序终止之前,应该关闭所有文件,否则将会丢失数据。如果顺利地执行了关闭操作,fclose函数的返回值为0,否则返回EOF(-1)。,fclose(文件指针);,2019/7/11,16,10.4 文件的读写,10.4.1字符读写函数 10.4.2字符串读写函数 10.4.3数据块读写函数 10.4.4格式读写函数,返回,2019/7/11,17,10.4.1字符读写函数,字符读写函数是以字符(字节)为单位的读写函数。 每次可从文件读出或向文件写入一个字符。 1读字符函数(fgetc) fgetc函数的功能是从指定的文件中读入一个字符,该文件必须是以读或读写方式打开的。fgetc函数调用的一般形式:,字符变量=fgetc(文件指针);,请见教材【例10.1】,2019/7/11,18,10.4.1字符读写函数,2写字符函数(fputc) fputc函数的功能是把一个字符写到指定的磁盘文件中。函数一般调用形式: 其中,“字符量”可以是字符常量或字符变量。例如:fputc(b,fp); 其意义是把字符b写入fp所指向的文件中。fputc函数会有一个返回值:如果写入成功则返回写入的字符,否则返回一个EOF(-1)。,fputc(字符量,文件指针);,请见教材【例10.2】,2019/7/11,19,10.4.2字符串读写函数(fgets和fputs函数),1读字符串函数fgets fgets函数的功能是从指定的文件中读一个字符串到字符数组中。fgets函数调用形式: n是一个正整数,表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志“0”。例如:fgets(string,n,fp); 其语义是从fp所指向的文件中读出n-1个字符送入字符数组string中。 请见教材【例10.3】,fgets(字符数组名,n,文件指针);,2019/7/11,20,10.4.2字符串读写函数(fgets和fputs函数),2写字符串函数fputs fputs函数的功能是向指定的文件写入一个字符串,其一般调用形式: 其中,“字符串”可以是字符串常量,也可以是字符数组名,或指针变量,例如: fputs(“computer”,fp); 其语义是把字符串“computer”写入fp所指的文件中去。 请见教材【例10.4】。,fputs(字符串,文件指针);,2019/7/11,21,10.4.3数据块读写函数(freed和fwrite函数),freed函数和fwrite函数,用来读写一个数据块。读数据块函数调用的一般形式: 写数据块函数调用的一般形式: “buffer”是指针,在fread函数中表示存放输入数据的首地址;在fwrite函数中表示存放输出数据的首地址;“size”表示要读写的数据块的字节数;“count”表示要读写的数据块块数;“fp”表示文件型指针。,fread(buffer,size,count,fp);,fwrite(buffer,size,count,fp);,2019/7/11,22,10.4.3数据块读写函数(freed和fwrite函数),例如:fread(fl,4,3,fp); 若fl是一个实型数组名,其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实型组fl中,连续读3次,即读3个实数到fl中。 请见教材【例10.5】。,2019/7/11,23,10.4.4格式读写函数(fscanf和fprinf函数),函数fscanf和fprinf与pfintf函数和scanf函数作用相仿,都是格式化读写函数。不同的是函数fscanf和fprinf的读写对象不是终端而是磁盘文件。它们的一般调用格式:,fscanf(文件指针,格式字符串,输入表列);,fprintf(文件指针,格式字符串,输出表列);,2019/7/11,24,10.4.4格式读写函数(fscanf和fprinf函数),例如:fscanf(fp,“%d,%c“, 功能:将整型变量a和字符型变量ch的值按给定的格式输出到fp指向的磁盘文件中。,2019/7/11,25,10.5 文件的定位,10.5.1 rewind函数 10.5.2 fseek函数,返回,2019/7/11,26,10.5.1 rewind函数,10.5.1 rewind函数 rewind函数可以强制使当前工作指针指向文件的开头。rewind函数在前面的实例中已经使用过,其一般调用形式: 它的功能是把文件内部的位置指针移到文件首部。,rewind(文件指针);,2019/7/11,27,10.5.2 fseek函数,fseek函数用来移动文件内部位置指针。其一般调用形式: 其中:“文件型指针”指向被移动的文件;“位移量”表示移动的字节数,要求位移量是long型数据。当用常量表示位移量时,ANSI C标准规定在常量后加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有3种:文件首(用0代表)、当前位置(用1代表)和文件尾(用2代表)。其表示方法请见教材中的表10-2。,fseek(文件型指针,位移量,起始点);,2019/7/11,28,10.6 文件检测函数,1文件结束检测函数feof feof函数的一般调用格式: 功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。 2读写文件出错检测函数 ferror函数的一般调用格式: 功能:检查文件在用各种输入输出函数进行读写时是否出错。如f
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号