《第十三章文件教案资料》由会员分享,可在线阅读,更多相关《第十三章文件教案资料(23页珍藏版)》请在金锄头文库上搜索。
1、第十三章 文 件,掌握文件以及缓冲文件系统、文件指针的概念; 学会使用文件打开、关闭、读、写等文件操作函数。,13.1 C文件概述,一、文件的概念,文件:是指存储在外部介质上数据的集合。,操作系统是以文件为单位对数据进行管理的。每一个与主机相连的输入或输出设备都看作是一个文件。,二、文件的存在形式及分类,文件的存在形式:文件名+文件内容。,文件内容:是一个字符(字节)序列,即由一个个字符 (字节)的数据顺序组成。对文件的存取是以字 符(字节)为单位的,这类文件称为流式文件。,文件的分类:,ASCII 码文件(文本文件):文件的每一个字节放 一个ASCII代码,代表一个字符。,二进制文件 :把内
2、存中的数据按其在内存中的存 储形式原样输出到文件上。,三、文件的基本操作,打开文件把文件名等目录信息从磁盘上读 入内存并存入结构体。, 关闭文件把内存结构体中的文件名等目录 信息写入磁盘。,(3) 写文件 向文件写内容。,(4) 读文件 从文件读内容。,四、 文件的输入输出方式,13.2 C文件类型指针,一、文件类型(FILE),每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的变量中。结构体类型由系统定义为“FILE”。,有的C版本在 stdio.h文件中有如下定义: typedef struct int _fd;; /
3、* 文件号 */ int _cleft; /* 缓冲区中剩下的字符 */ int _mode; /* 文件操作模式 */ char *_nexttc; /* 下一个字符位置 */ char *_buff; /* 文件缓冲区位置 */ FILE;,二、定义FILE类型指针变量,FILE 类型的指针变量定义方法,FILE *指针变量名;,例如:FILE *fp; 含义:fp是一个指向FILE类型结构体的指针变量。,可以使fp指向某个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。,13.3 文件的打开和关闭函数,一、文件的打开函数(fopen函数),(1) 调用方式:,FILE
4、*fp ; fp= fopen(文件名,文件的使用方式);,所要打开的文件名。必须是用双引号引起的字符串常量。,具有特定含意的符号也必须 由双引号引起,用户定义的文件类型指针变量,例 FILE *fp; fp=fopen(stu.dat,r);,文件使用方式,基本方式字符(单独使用是对文本文件):,按二进制格式读写文件(基本方式字符+“b”),b 辅助说明,按二进制格式读写文件。,同时进行读写文件(基本方式字符+“b”+“+”),+ 辅助说明,可同时进行读和写文件。,例如:fp=(“stu.dat”,“rb”);,例如:fp=(“stu.dat”,“r+”);,文件使用方式,基本方式字符(单独
5、使用是对文本文件):,按二进制格式读写文件(基本方式字符+“b”),b 辅助说明,按二进制格式读写文件。,同时进行读写文件(基本方式字符+“b”+“+”),+ 辅助说明,可同时进行读和写文件。,例如:fp=(“stu.dat”,“rb”);,例如:fp=(“stu.dat”,“r+”);,文件使用方式,基本方式字符(单独使用是对文本文件):,按二进制格式读写文件(基本方式字符+“b”),b 辅助说明,按二进制格式读写文件。,同时进行读写文件(基本方式字符+“b”+“+”),+ 辅助说明,可同时进行读和写文件。,例如:fp=(“stu.dat”,“rb”);,例如:fp=(“stu.dat”,“
6、r+”);,例:#include main() FILE *fp; if(fp=fopen(stu.dat,r) =NULL) printf(file not found.); exit(0); else printf(file opened ok!); fclose(fp); ,程序运行结果: 如果磁盘上存在文件stu.dat,屏幕上会显示 file open ok!,否则屏幕上显示file not found.。,常使用此方法打开一个文件,exit函数的功能是关闭所有文件,终止程序运行。exit(0)为正常终止程序,二、文件的关闭函数(fclose函数),(1) 调用方式:,fclose(
7、文件指针);, 功能:关闭由文件指针指定的文件,把缓冲区 中的数据(未装满缓冲区的数据)输出 到磁盘上,释放文件指针。,例如: FILE *fp; fp=fopen(“output.dat”,“r+”); /* 进行读写操作 */ fclose(fp);,注意:fopen函数和fclose函数总是成对出现的。 无fclose函数时会导致部分数据丢失!,2. fgetc函数,一般调用形式:,字符变量=fgetc(文件指针);,功能:从文件指针所指文件中读一个字符赋给指 定的字符变量。当遇文件结束符,返回一 个文件结束标志EOF(-1)。,例如:ch=fgetc(fp); 其中ch为字符变量,fp
8、为文件指针。 含义:从fp所指向的文件中读入一个字符赋 给字符变量ch。,例: 阅读程序。 #include stdio.h #define NULL 0 main() FILE *fp; int count=0; char c; if(fp=fopen(“file.txt”,“r”)=NULL) printf(“Cant Open File n”); exit(0); c=fgetc(fp); while(c!=EOF) count+; c=fgetc(fp); printf(“count=%dn”,count); fclose(fp); ,若文件file.txt的内容是: abcd1234
9、ABCD,输出结果:,12,这是读一个文本文件中字符,并判断文件是否结束的常用方法,关于文件读写状态的检测,检测函数调用是否成功,可有两种手段来检测:,1. 由函数的返回值来确定,2. 用文件状态检测函数feof、ferror、fclearerr,feof(fp) :测试fp所指向的文件的位置是否是文件 尾。若已达到文件尾,函数返回非零值, 否则返回0。,常用程序段:while(!feof(fp),ferror(fp) :测试对fp所指向的文件的操作是否出 错。若出错,函数返回非零值,否则 返回0。,fclearerr(fp) :使ferror和feof函数值置0。,二、 fread函数和fw
10、rite函数,一般调用形式:,fread(buffer,size,count,fp);,fwrite(buffer,size,count,fp);,其中:,buffer:是一个指针。(是起始地址)。 对fread来说,它是读入数据的存放地址。 对fwrite来说,它是输出数据的地址。,size :要读写的字节数。,count:要进行读写多少个size字节的数据项。,功能:对fp所指的文件读写buffer所指的size*count 个字节数据。,例如:fread(f,4,2,fp); (其中f是实型数组名),例1 把数组a写入文件fa;再从fa读入数组b。 #include stdio.h ma
11、in() FILE* fp; int a100=1,5,6,78,21,34,67,87,23,b100, i ; fp=fopen(tmp,wb); fwrite(a,sizeof(a),1,fp); /* fwrite(a,sizeof(int),100,fp);*/ fclose(fp); fp=fopen(tmp,rb); fread(b,sizeof(a),1,fp); for(puts(),i=0;i10;i+)printf(%6d,bi); fclose(fp); ,四、 fputs函数 和fgets函数,这两个函数是以字符串为单位进行文件读写的函数。,一般调用形式:,fputs
12、(字符串,文件指针);,1. fputs函数,功能:向指定文件输出一个字符串。,例如:fputs(str,fp); (其中str是字符数组名) 含义:向fp 所指向的文件中输出str中的字符串。,2. fgets函数,fgets(字符串,字符串长度,文件指针);,功能:从指定文件中读入一个字符串。,例如:fgets(str,n,fp); (其中str是字符数组名) 含义:从fp指向的文件读取长度为n-1的字符串, 最后加一个0存入字符数组str中。,调用形式:,三、 fprintf 函数和fscanf函数,这两个函数是进行格式读写文件的函数 。,一般调用形式:,fprintf(文件指针,格式字
13、符串,输出表列);,fscanf(文件指针,格式字符串,输入表列) ;,例如:fprintf(fp,“%d,%6.2f”,i,x);,功能:按指定格式将数据写到指定文件中。 或从指定文件按格式输入数据。,又如:fscanf(fp,“%d,%f”,功能:把文件的读写位置指针移到指定的位置。,例如:fseek(fp,128L,SEEK_SET); 将位置指针移到离文件头128个字节处。,例如:fseek(fp,-10L,2); 将位置指针从文件末尾处向后退10个字节。,注意:fseek函数一般用于二进制文件。,3. ftell函数,一般调用形式:,ftell(文件指针);,功能:返回文件位置指针的
14、当前值。,例如:pos=ftell(fp); 获取fp指向文件的当前读写位置,并将其值 赋给变量pos 。,作业:,1. 编写并上机调试12.4(仅实现循环左移),3. 思考题:13.1、13.2、13 .3,2. 编写并上机调试13.6,五、文件的定位函数,1. rewind函数,一般调用形式:,rewind(文件指针);,功能:使位置指针重新返回文件的开头。,2. fseek函数,一般调用形式:,fseek(文件指针,位移量,起始点);,起始点:用0、1、2或其对应的名字SEEK_SET、 SEEK_CUR、SEEK_END代替,分别表 示文件开始、文件当前位置、文件末尾。,位移量:指以起始点为基点,向前(-)或向后移动的 字节数。ANSI C标准规定在数字末尾加一个 字母L,表示long型。,