《C语言程序ppt课件ch.ppt》由会员分享,可在线阅读,更多相关《C语言程序ppt课件ch.ppt(28页珍藏版)》请在三一办公上搜索。
1、共 28 页 第 1 页,第十一章,文 件,共 28 页 第 2 页,本 章 要 点,掌握文件类型指针(FILE类型指针)掌握文件的打开与关闭(fopen,fclose)掌握文件的读写,共 28 页 第 3 页,11.1 C文件概述,1.定义:文件是指存储在外部介质上数据的集合。操作系统是以文件为单位对数据进行管理的。每一个与主机相连的输入或输出设备都看作是一个文件。2.结构:字符(字节)序列,即由一个个字符(字节)的数据顺序组成,对文件的存取是以字符(字节)为单位的,这类文件称为流式文件。,共 28 页 第 4 页,3.组织形式:ASCII码(文本)文件和二进制文件ASCII码(文本)文件:
2、文件的每一个字节放一个ASCII代码,代表一个字符。二进制文件:把内存中的数据按其在内存中的存储形式原样输出到磁盘文件上。,4.输入和输出方式缓冲文件系统:系统自动在内存区为每一个正在使用的文件名开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存的缓冲区中,装满缓冲区后在一起送到磁盘中去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区,然后再从缓冲区逐个地将数据送到程序数据区。,共 28 页 第 5 页,非缓冲文件系统:系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。对文件的读写操作通过库函数实现。,共 28 页 第 6 页,11.2 文件类型指针,定义:缓
3、冲文件系统中,获取内存中存放文件有关信息的结构体的指针定义为文件类型指针。通过文件指针变量能找到指定的文件,以实现对文件的访问。结构体类型 FILE 每个被使用的文件都在内存中开辟一个区,用来存放文件的有关信息(如文件名,状态,当前位置等)。这些信息保存在一个结构体类型的变量中。,共 28 页 第 7 页,结构体类型由系统定义为“FILE”。有的C版本在 stdio.h文件中有如下定义typedef struct int _fd;;/*文件号*/int _cleft;/*缓冲区中剩下的字符*/int _mode;/*文件操作模式*/char*_nexttc;/*下一个字符位置*/char*_b
4、uff;/*文件缓冲区位置*/FILE;,共 28 页 第 8 页,例:定义一个FILE类型的数组FILE-efile-MAXFILE;-MAXFILE:数组元素个数,也就是可使用文件的最大数目。例:定义一个文件指针变量FILE*fp;fp是一个指向FILE结构体的指针变量。可以使 fp指向某一个具体文件的结构体变量,通过读取该结构体变量中的有关信息来实现对文件的访问和操作。也就是通过fp 指定要被访问的文件。,共 28 页 第 9 页,文件的一般操作过程 打开文件 建立用户程序与文件的联系 操作文件 对文件进行读、写、追加等操作 关闭文件 切断文件与程序的联系,共 28 页 第 10 页,1
5、1.3 文件的打开与关闭,文件的打开(函数 fopen)功能:在对文件读写之前打开文件。调用方式:FILE*fp;fp=fopen(文件名,使用文件方式);返回值:指定文件的指针,若失败返回 NULL三要素:文件指针,文件名,使用方式例:fp=fopen(“m1”,”r”);,表示打开名为m1的文件,使用方式为“读入”.,共 28 页 第 11 页,文件使用方式,共 28 页 第 12 页,文件使用方式,共 28 页 第 13 页,进行文件读写的一般规则if 读文件 指定的文件必须存在,否则出错;if 写文件(指定的文件可以存在,也可以不存在)(1)以“w”方式写:if该文件已经存在 原文件将
6、被删去然后重新建立;else 按指定的名字新建一个文件;(2)以“a”方式写:if该文件已经存在 写入的数据附加在原数据后边;else 按指定的名字新建一个文件(与“w”相同);(3)文件同时读和写:使用“r+”、“w+”、“a+”打开文件。,共 28 页 第 14 页,11.3.2 文件的关闭(函数 fclose),功能:使用文件之后关闭文件。使文件指针变量不再指向该文件。调用方式:fclose(文件指针);返回值:关闭成功返回 0,若失败返回 非零值。例:fclose(fp);在程序结束之前关闭所有使用的文件,如果不关闭文件可能会丢失数据。用fclose关闭文件,将缓冲区的数据输出到磁盘后
7、再释放文件指针变量,可避免数据丢失。,共 28 页 第 15 页,11.4 文件的读写,11.4.1 格式化读写函数 fscanf 功能:将指定磁盘文件格式化赋给指定对象。fprintf 功能:将指定对象格式化输出到指定磁盘文件上。格式:fprintf(文件指针,格式字符串,输出表列)fscanf(文件指针,格式字符串,输入表列)例:fscanf(fp,”%d%f”,将a和b的值按指定格式写入到fp所指向的文件中。,共 28 页 第 16 页,11.4.2 fputc函数和fgetc函数fputc 功能:把一个字符写到fp所指向的磁盘文件中。格式:fputc(ch,fp);,文件类型指针变量,
8、要输出的字符,fgetc 功能:从指定磁盘文件读出一个字符,该文件必须 是以读或读写的方式打开的。格式:ch=fgetc(fp);,文件类型指针变量,字符变量,若读到文件尾结束符时,函数返回一个文件结束标志EOF(值为-1)。可用feof(fp)处理文件是否结束,为1结束,否则为0。,若写成功,函数返回该字符,否则返回一个文件结束标志EOF(值为-1)。,共 28 页 第 17 页,例:将一个磁盘文件中的信息复制到另一个磁盘文件中。,#include“stdio.h”main()FILE*in,*out;char ch,infile10,outfile10;printf(“%Enter the
9、 infile name:n”);scanf(“%s”,infile);printf(“Enter the outfile name:n);scanf(“%s”,outfile);,共 28 页 第 18 页,if(in=fopen(infile,“r”)=NULL)printf(“cannot open infilen”);exit(0);if(out=fopen(outfile,”w”)=NULL)printf(“cannot open infilen”);exit(0);while(!feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);
10、,值为1数据读取结束,共 28 页 第 19 页,11.4.3 fread函数和fwrite函数fread 功能:从指定磁盘文件读入一组数据。格式:fread(buffer,size,count,fp);,要读写的字节数,指针,即读入数据的存放地址,文件类型指针变量,要进行读写多少个size字节的数据项,例:fread(a,2,3,fp);a数组名,从fp所指向的文件中读出3次数据,每次2个字节,存入a数组中。,共 28 页 第 20 页,fwrite 功能:把一组数据写到指定磁盘文件上。格式:fwrite(buffer,size,count,fp);,共 28 页 第 21 页,例如:假设学
11、生的数据已存放在磁盘文件中,可用以下for语句和fread函数读入40个学生的数据。for(i=0;i40;i+)fread(,共 28 页 第 22 页,11.4.4 fgets函数和fputs函数fgets 功能:从文件读入一个指定的字符串到内存中。例:fgets(str,n,fp);从fp指向的文件读出一个具有n-1个字符的字符串,存入其始地址为str的内存中.fputs 功能:将指定的字符串输出到fp所指向的文件中.fputs(str,fp);,共 28 页 第 23 页,例:已有文本文件test.txt,内容为Hello,everyone!,以下程序中文件test.txt已正确为读而
12、打开,由文件指针fr指向该文件,则程序输出结果为_.#include main()FILE*fr;char str40;fgets(str,5,fr);printf(%sn,str);fclose(fr);,Hell,从fr指向的文件读出一个具有5-1个字符的字符串,存入其始地址为str的内存中.,共 28 页 第 24 页,例:将两个变量的数值写入test.txt。#include“stdio.h”main()FILE*fp;int i=3;float t=4.5;if(fp=fopen(“test.txt”,“w”)=NULL)printf(“file open failed”);exit
13、(0);fprintf(fp,”%d,%6.2f”,i,t);fclose(fp);,运行结果:test.txt 的内容是3,4.50,定义文件指针变量,写入i,t,关闭文件,共 28 页 第 25 页,例:现有某校理学院2007级8班的三十名学生的成绩数据(包括学号,姓名,三门课成绩,平均成绩),存放在data08.txt文件中。编写程序从文件读入以上数据,计算出每名学生的平均成绩,再将成绩数据存放在data08_a.txt文件中。,共 28 页 第 26 页,#include stdio.hstruct student long num;char name8;int score3;floa
14、t avr;stu30;main()int i,j,sum;FILE*fp1;/*读文件*/if(fp1=fopen(data08.dat,r)=NULL)printf(Cannot open file!);return 0;for(i=0;i30;i+)fscanf(fp1,%ld%s%d%d%d,共 28 页 第 27 页,/*计算*/for(i=0;i30;i+)sum=0;for(j=0;j3;j+)sum+=stui.scorej;stui.avr=sum/3.0;/*写文件*/if(fp1=fopen(data08_a.txt,w)=NULL)printf(Cannot open file!);return 0;for(i=0;i30;i+)fprintf(fp1,%ld%s%d%d%d%fn,stui.num,stui.name,stui.score0,stui.score1,stui.score2,stui.avr);fclose(fp1);,共 28 页 第 28 页,检测文件指针函数:feof()调用一般形式:feof(fp);功能:检测文件指针是否到文件尾,若到文件尾,函数值为真(非0),否则为假。exit(0):系统标准函数,作用是关闭所有打开的文件,并终止程序的执行。参数0表示程序正常结束,非0参数通常表示不正常的程序结束。,