收藏 分销(赏)

文件程序设计.ppt

上传人:精**** 文档编号:10509228 上传时间:2025-05-31 格式:PPT 页数:43 大小:1.03MB
下载 相关 举报
文件程序设计.ppt_第1页
第1页 / 共43页
文件程序设计.ppt_第2页
第2页 / 共43页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,C,语言程序设计,第,9,章 文件程序设计,第,9,章 文件程序设计,9.1,文件概述,9.2,文件的基本操作,9.3,文件的数据块读写操作,9.4,文件的其他操作,9.5,文件应用举例,9.1,文件概述,从上机实现第一个,C,语言程序开始,“文件”即与学习,C,语言程序设计密不可分,实现任何一个,C,语言程序,都会涉及到多种类型的文件,例如,编辑阶段建立的源程序文件、编译阶段生成的目标代码文件、连接阶段构建的可执行文件等。因此,“文件”并不是一个新概念。但是,,C,语言中的“文件”有其自身的特点,本节就,C,语言中关于“文件”的概念、分类、文件操作的基本过程等作概要介绍。,重点内容,文件的操作过程,文件指针,9.1,文件概述,9.1.1,文件的概念,9.1.2,文件的分类,9.1.3,文件的一般操作过程,9.1.4,文件的指针,9.1.1,文件的概念,文件是,计算机中的一个重要概念,通常是指,存储在外部介质上的信息的集合,。,在,C,语言中,所有的外部设备均被作为文件对待,这种文件称为设备文件。,计算机对文件的操作总体上分成输入和输出两大类,文件的输人输出(,I/0,)过程通过操作系统进行管理。,C,语言程序对文件的处理通过标准函数库中的文件操作函数实现。,9.1.1,文件的概念,C,语言使用,缓冲文件系统,在程序和数据外部文件之间交换数据。,程序中的数据(如存储在数组、简单变量、结构体变量中的数据等)在写入磁盘文件之前,首先在“,输出文件缓冲区,”暂存,当该缓冲区数据存满后,再输出到文件中。这一过程称为“,写文件,”,是数据输出过程。,“写文件”的逆向操作是将文件中的数据装入内存,作为程序处理数据。这一过程称为“,读文件,”,是数据输入过程。当从文件向内存输入数据时,首先把读入的数据输送到“,输入文件缓冲区,”,然后再传送给程序。,9.1.1,文件的概念,使用缓冲区的文件读、写示意图,9.1.2,文件的分类,以,ASCII,码字符形式存储的文件称为文本文件,又叫,ASCII,文件。,例如用高级程序语言编写的程序文件是文本文件,用,Windows“,记事本”程序创建的文件也是文本文件。文本文件是一种字符流文件,文本文件的一个字符就是一个字节,因而方便了字符的处理,不过文本文件一般要占用较大的存储空间。,二进制文件存储二进制数据,按照数据在内存中的字节流存储。,例如,C,程序的目标文件(扩展名为,obj,)和可执行文件(扩展名为,exe,)都是二进制文件。在二进制文件中,字节信息与实际的数据位并不一一对应,因此,若直接显示二进制文件内容时,用户看到的是一些不能识别的字符。,文本文件,二进制文件,9.1.3,文件的一般操作过程,使用文件的一般步骤,打开文件操作文件关闭文件,打开文件:建立用户程序与文件的联系,系统为文件开辟文件缓冲区。,操作文件:是指对文件的读、写、追加和定位操作。,读操作:从文件中读出数据,即将文件中的数据输入到计算机内存。,写操作:向文件中写入数据,即将计算机内存中的数据输出到文件。,追加操作:将新的数据写到文件原有数据的后面。,定位操作:移动文件读写位置指针。,关闭文件:切断文件与程序的联系,将文件缓冲区的内容写入磁盘,并释放文件缓冲区。,9.1.4 文件的指针,文件型指针变量的定义,FILE*,变量名,;,例如:,FILE*p;,注意:,由于文件类型,FILE,在头文件,stdio.h,中定义,所以在使用,FILE,类型前必须先打开,stdio.h,文件。,如果需要对某一个文件进行读写操作,必须首先要指定指向它的文件指针。只有通过文件指针,才能调用相应的文件。当程序需要同时处理多个文件时,则需要说明多个,FILE,型的指针变量,使它们分别指向多个不同的文件。,9.2,文件的基本操作,9.2.1,打开和关闭文件,9.2.2,最基本的文件读写函数,9.2.1,打开和关闭文件,打开文件操作是使用文件的第一个步骤,而关闭文件操作则是使用文件的最后一个步骤。,C,语言系统分别使用,fopen(),函数和,fclose(),函数实现文件的打开和关闭操作。,1,文件打开函数,fopen(),fopen(),函数用来实现打开文件,它解决如下,3,个问题:,指定要打开的文件名;,指定文件的使用方式,如是读文件还是写文件等;,为打开的文件指定一个指针变量,以便使用这个指针变量对文件进行访问。,fopen(),函数的调用方式,FILE*fp;,fp=fopen(,文件名,使用文件的方式,);,例如,:,fp=(example.txt,r);,表示要打开的文件名为,example.txt,,使用文件的方式是“,r”,方式,文件指针是,fp,。,9.2.1,打开和关闭文件,文件使用方式,文件使用方式,作 用,r,以“只读”方式打开一个文本文件,w,以“只写”方式打开一个文本文件,a,向文本文件尾增加数据,rb,以“只读”方式打开一个二进制文件,wb,以“只写”方式打开一个二进制文件,ab,向二进制文件尾增加数据,r+,以“读,/,写”方式打开一个文本文件,w+,以“读,/,写”方式建立一个新的文本文件,a+,以“读,/,写,/,追加”方式打开一个文本文件,rb+,以“读,/,写”方式打开一个二进制文件,wb+,以“读,/,写”方式建立一个新的二进制文件,ab+,以“读,/,写,/,追加”方式打开一个二进制文件,9.2.1,打开和关闭文件,2,关闭文件函数,fclose(),fclose(),函数的一般格式,fclose(,文件指针,);,功能,关闭“文件指针”所指向的文件,释放打开文件时使用的结构体变量,断开文件指针与文件的联系。,例如:,fclose(fp);,9.2.2,最基本的文件读写函数,1,fputc(),函数,一般形式,fputc(ch,fp);,功能,将字符(,ch,的值)输出到,fp,所指向的文件中。,9.2.2,最基本的文件读写函数,例,9-1,使用,fputc(),函数在屏幕显示一个字符串。,/*program e9-1.c*/,#include,int main(),char*p=This is a example.;,while(*p!=0),fputc(*p+,stdout,);,return 0,;,设备文件,9.2.2,最基本的文件读写函数,例,9-2,把从键盘输入的一个字符串写入到磁盘文件,example.txt,中。,/*program e9-2.c*/,#include,int main(),char ch;,FILE*fp;,fp=fopen(example.txt,w);,printf(Enter a string:);,while(ch=getchar()!=n),fputc(ch,fp);,fclose(fp);,return 0;,9.2.2,最基本的文件读写函数,2,fgetc(),函数,从指定文件读入一个字符,该文件必须是以读或读写方式打开的。,通常使用如下的形式调用,fgetc(),函数,ch=fgetc(fp);,其中,,fp,为文件型指针变量,,ch,为字符变量。正常情况下,fgetc(),函数的返回值是从文件中读出的一个字符。,当打开文件并立即使用,fgetc(),读文件时,,fgetc(),函数从文件开始位置读取一个字符。每读取一个字符后,文件的位置指针后移一个字符位置。若当前读取的是文本文件,当遇到文件结束标志时,,fgetc(),函数的返回值为,EOF,。,9.2.2,最基本的文件读写函数,例,9-3,使用,fgetc(),函数输出文件,example.txt,的内容。,/*program e9-3.c*/,#include,int main(),char ch;,FILE*fp;,fp=fopen(example.txt,r);,while(ch=,fgetc(fp),)!=EOF),putchar(ch);,fclose(fp);,return 0;,9.2.2,最基本的文件读写函数,例,9-4,使用,feof(),进行文件读取控制,输出文件,example.txt,的内容。,#include,#include,int main(void),char ch;,FILE*fp;,if(fp=fopen(example.txt,r)=NULL),printf(file can not open!n);,exit(1);,ch=fgetc(fp);,while(!feof(fp),putchar(ch);,ch=fgetc(fp);,fclose(fp);,return 0;,判断被读取的文件是否已经读完。,当文件位置指针越过文件结束标志时,,,feof(),的值是,0,。,9.3,文件的数据块读写操作,文件的数据块读写是指对文件进行读写操作时,一次读写多个数据,,C,语言提供的操作函数是,fread(),和,fwrite(),。,1.fwrite(),函数,2.fread(),函数,9.3,文件的数据块读写操作,-,fwrite(),函数,fwrite(),函数的功能是把内存中的一些数据块写到指定的文件中。,一般调用形式,fwrite(buffer,size,count,fp);,其中:,fp,是接受数据的文件指针;,buffer,是数据块的内存首地址,通常是指针变量名、数组名等;,size,是一个数据块的字节数(即数据块的大小);,count,是执行一次,fwrite(),函数从内存输出到,fp,文件的数据块数目。,9.3,文件的数据块读写操作,-,fwrite(),函数,例,9-5,从键盘输入一批学生数据,然后以,“,stu_list,”,文件名存储到磁盘上。,#include,#include,#define N 4,struct student_type,char name10;,int num;,int score;,stud;,int main(),int i;,FILE*fp;,if(fp=fopen(stu_list,wb)=NULL),printf(Can not open filen);,exit(1);,printf(Input data,please!n);,for(i=0;iN;i+),scanf(%s%d%d,stud.name,fwrite(&stud,sizeof(struct,student_type),1,fp);,fclose(fp);,printf(All right.n);,return 0;,姓名,学号,成绩,zhangli,9901,93,malong,9902,87,wangfei,9903,91,xiaohong,9904,89,9.3,文件的数据块读写操作,-,fread(),函数,例,9-6,将上述,stu_list,文件的内容显示在屏幕上。,/*program e9-6-1.c*/,#include,#include,#define N 4,struct student_type,char name10;,int num;,int score;,stud;,int main(),int i;,FILE*fp;,if(fp=fopen(stu_list,rb)=NULL),printf(Can not open file.n);,exit(1);,for(i=0;iN;i+),fread(,printf(%-10s%4d%4dn,stud.name,stud.num,stud.score);,fclose(fp);,return 0;,9.3,文件的数据块读写操作,-,fread(),函数,再如,设有如下定义:,struct student_type,char name10;,int num;,int age;,stud40;,其中,结构体数组,stud,的每一个元素用来存放一个学生的有关数据,假设学生的数据已存放在磁盘文件中,且该文件已打开,并由,fp,指向,则可以用下面的语句把文件中前,40,个学生的数据输入到结构体数组,stud,中:,for(i=0;i40;i+),fread(,9.4,文件的其他操作,9.4.1,文件的格式化读写,9.4.2,文件位置指针的定位,9.4.3,文件的字符串操作,9.4.1,文件的格式化读写,1,文件的格式化读操作,由,fscanf(),函数实现,从指定的文件中,按照说明的格式向变量提供数据。,一般使用格式,fscanf(fp,格式字符串,输入表列,);,其中,fp,是文件指针,“格式字符串”和“输入表列”与,scanf(),函数的相关内容相同。,例如:,fscanf(fp,“%d”,该语句将磁盘文件中的数据送给变量,m,,其中的磁盘文件由,fp,指向。,9.4.1,文件的格式化读写,2,文件的格式化写操作,由,fprintf(),函数实现,将指定变量的值按照一定的格式写到指定的文件中。,一般使用格式,fprintf(fp,格式字符串,输出表列,);,说明:,fp,是要写入数据的文件指针。,“格式字符串”和“输出表列”与,printf(),函数的相关内容形同。,例如:,fprintf(fp,%d,m);,该语句将整型变量,m,按,%d,格式输出到,fp,指向的文件中。,例,9-7,从键盘输入一个字符串和一个十进制整数,将它们写入,test,文件中,然后再从,test,文件中读出并显示在屏幕上。,#include,int main(),char s100;,int a;,FILE*fp;,if(fp=fopen(test,w)=NULL),printf(file open error.n);exit(0);,fscanf(stdin,%s%d,s,fprintf(fp,%s%d,s,a);,fclose(fp);,if(fp=fopen(test,r)=NULL),printf(Cannot open file.n);exit(0);,fscanf(fp,%s%d,s,fprintf(stdout,%s%dn,s,a);,fclose(fp);,return 0;,9.4.2,文件位置指针的定位,1,fseek(),函数,功能:改变文件位置指针。,调用形式,fseek(fp,offset,position);,其中:,fp,为文件型指针;,文件位置指针的定位由参数,offset,和,position,共同确定。,position,规定指针定位时的基准位置,,offset,规定文件位置指针离开基准位置的偏移量,它的单位是字节。,position,的值用整常数表示,取值范围是,0,、,1,、,2,三个数之一,其意义如下:,0,:表示基准位置为文件的开头位置;,1,:表示基准位置为文件的当前位置;,2,:表示基准位置为文件的结尾位置,该位置在文件内容的最后一个字节之后。,9.4.2,文件位置指针的定位,fseek(),函数调用的实例:,fseek(fp,50L,0);,将位置指针移到文件头起始第,50,个字节处,fseek(fp,100L,1);,将位置指针从当前位置向文件尾方向移动,100,个字节,fseek(fp,-20L,2);,将位置指针从文件末尾向文件头方向移动,20,个字节,9.4.2,文件位置指针的定位,例,9-8,在例,9-6,中建立了学生数据文件,stu_list,,将其中第,3,个学生的成绩修改为,97,。,/*program e9-8.c*/,#include,#include,struct student_type,char name10;,int num;,int score;,stud;,int main(),int i,size;,FILE*fp;,size=sizeof(struct student_type);,if(fp=fopen(stu_list,rb+)=NULL),printf(file open error.n);,exit(1);,fseek(fp,2*size,0);,fread(,printf(%s%d%dn,stud.name,stud.num,stud.score);,printf(new score:);,scanf(%d,fseek(fp,-size,1);,fwrite(,fclose(fp);,return 0;,9.4.2,文件位置指针的定位,2.rewind(),函数,作用:将文件位置指针复位。,调用形式,rewind(fp);,其中:,fp,为文件型指针。,执行,rewind(),函数后,对于,fp,指向的文件,不管当前的文件位置指针在何处,都使它复位到文件的开始位置。,9.4.1,文件位置指针的定位,例,9-9,在屏幕上显示文件,e9-6-2.c,的内容,并将该文件复制为文件,e9-6-3.c,。,/*program e9-9.c*/,#include,int main(void),char ch;,FILE*fp1,*fp2;,fp1=fopen(e9-6-2.c,r);,fp2=fopen(e9-6-3.c,w);,while(ch=fgetc(fp1)!=EOF)putchar(ch);,rewind(fp1);,while(ch=fgetc(fp1)!=EOF)fputc(ch,fp2);,fclose(fp1);,fclose(fp2);,return 0;,9.4.2,文件位置指针的定位,3.ftell(),函数,ftell(),函数用于获取文件位置指针,其调用形式如下:,ftell(fp);,其中:,fp,为文件指针。,ftell(),函数的返回值是,fp,所指向文件的当前读写位置,该值是一个长整型数,是位置指针从文件开始处到当前位置的位移量的字节数。,9.4.3 ftell(),函数,例,9-10,新建,data.txt,文件,检查文件位置指针值;然后将字符串,Beijing 2008,写入文件中,再检查文件位置指针的值。,#include stdio.h,int main(),FILE*fp;long position;,fp=fopen(data.txt,w);,position=ftell(fp);,printf(position=%ldn,position);,fprintf(fp,Beijing 2008);,position=ftell(fp);,printf(position=%ldn,position);,fclose(fp);,return 0;,9.4.4,文件的字符串操作,1,fgets(),函数,一般调用形式,fgets(buffer,n,fp);,作用,从,fp,指向的文件中读取,n-1,个字符,然后存储到以,buffer,为首地址的的内存空间中,通常,buffer,是一个指针变量名、数组名等。如果在读入,n-1,个字符的过程中遇到换行符或,EOF,,读入即结束。字符串读入后在最后加一个,0,字符作为字符串结束标志。,9.4.4,文件的字符串操作,2,fputs(),函数,调用形式,fputs(buffer,fp);,作用,将内存,buffer,中的字符串写到,fp,指向的文件中,,buffer,可以是一个字符串常量,也可以是字符串的首地址。,9.4.4,文件的字符串操作,例,9-11,将字符串,Visual C+,和,Visual basic,依次存入文件,text,中,然后将第一个字符串读出并显示出来。,#include,int main(),FILE*fp;,char string20;,fp=fopen(text,w+);,fputs(Visual C+n,fp);,fputs(Visual basicn,fp);,rewind(fp);,fgets(string,20,fp);,puts(string);,fclose(fp);,return 0;,9.5,文件应用举例,9.5.1,文件复制,9.5.2,存储在文件中的学生数据排序,9.5.1,文件复制,例,9-12,设计一个程序,实现任意文本文件的复制。,问题分析与算法设计,由于源文件是任意的,所以源文件名应通过键盘输入;同样,生成的目标文件名也应由键盘输入。,源文件以只读方式打开,目标文件以写方式打开。,从第一个字符开始,顺序逐字符读出源文件,每读出一个字符,立即写入目标文件中。,实现程序,#include,#include,int main(void),char source20,target20,ch;,FILE*fp_s,*fp_t;,printf(Enter the source filename:);,scanf(%s,source,printf(Enter the target filename:);,scanf(%s,target,if(fp_s=fopen(source,r)=NULL,printf(Cannot open source file.n);,exit(1);,if(fp_t=fopen(target,w)=NULL,printf(Cannot open target file.n);,exit(1);,while(ch=fgetc(fp_s)!=EOF,fputc(ch,fp_t);,fclose(fp_s);,fclose(fp_t);,return 0;,9.5.2,存储在文件中的学生成绩排序,例,9-13,在例,9-5,中,建立了一个,stu_list,文件。编写程序,对该文件的内容按照学习成绩降序排序后显示出来。,问题分析与算法设计,定义,struct student_type,类型的结构体数组,stud,。,以只读方式打开,stu_list,文件,将文件内容读出后存储到,stud,数组中。,对,stud,数组按,score,成员进行降序排序。,输出,stud,数组。,实现程序,实现程序,/*program e9-13.c*/,#include,#include,#define N 4,struct,student_type,char name10;,int,num;,int,score;,studN,temp,;,int main(),int i,j;,FILE*fp;,if(fp=fopen(stu_list,rb)=NULL),printf(Can not open file.n);,exit(1);,fread(stud,sizeof(struct student_type),N,fp);,for(i=1;iN;i+),for(j=0;jN-i;j+),if(studj.scorestudj+1.score),temp=studj;,studj=studj+1;,studj+1=temp;,for(i=0;iN;i+),printf(%-10s%4d%4dn,studi.name,studi.num,studi.score);,fclose(fp);,return 0;,小 结,(1),文件是计算机中的一个重要概念。,C,语言中的文件分为设备文件和磁盘文件两类,磁盘文件进一步分为,ASCII,码文件和二进制文件。打开文件是使用文件的第一步操作,使用,fopen(),函数实现,关闭文件是使用文件的最后一步操作,使用,fclose(),函数实现。,(2),任何打开的文件都对应一个文件指针,文件指针的类型是,FILE,型,它是在,stdio.h,中预定义的一种结构体类型。文件指针和文件使用方式是文件操作的重要概念,任何一个文件被打开时必须指明它的读写方式。,(3),文件操作都是由函数实现的,,fgetc(),和,fputc(),函数用于文件的字符读写,,fread(),和,fwrite(),函数用于文件的数据块读写,,fgets(),和,fputs(),用于文件的字符串读写,,fseek(),和,rewind(),函数用于文件随机读写定位,,feof(),函数用于文件结束状态测试。,谢谢观看!,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服