第9章文件程序设计.ppt
- 文档编号:18629789
- 上传时间:2023-08-21
- 格式:PPT
- 页数:42
- 大小:1.02MB
第9章文件程序设计.ppt
《第9章文件程序设计.ppt》由会员分享,可在线阅读,更多相关《第9章文件程序设计.ppt(42页珍藏版)》请在冰点文库上搜索。
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打开和关闭文件,文件使用方式,9.2.1打开和关闭文件,2关闭文件函数fclose()fclose()函数的一般格式fclose(文件指针);功能关闭“文件指针”所指向的文件,释放打开文件时使用的结构体变量,断开文件指针与文件的联系。
例如:
fclose(fp);,9.2.2最基本的文件读写函数,1fputc()函数一般形式fputc(ch,fp);功能将字符(ch的值)输出到fp所指向的文件中。
9.2.2最基本的文件读写函数,例9-1使用fputc()函数在屏幕显示一个字符串。
/*programe9-1.c*/#includeintmain()char*p=Thisisaexample.;while(*p!
=0)fputc(*p+,stdout);return0;,设备文件,9.2.2最基本的文件读写函数,例9-2把从键盘输入的一个字符串写入到磁盘文件example.txt中。
/*programe9-2.c*/#includeintmain()charch;FILE*fp;fp=fopen(example.txt,w);printf(Enterastring:
);while(ch=getchar()!
=n)fputc(ch,fp);fclose(fp);return0;,9.2.2最基本的文件读写函数,2fgetc()函数从指定文件读入一个字符,该文件必须是以读或读写方式打开的。
通常使用如下的形式调用fgetc()函数ch=fgetc(fp);其中,fp为文件型指针变量,ch为字符变量。
正常情况下fgetc()函数的返回值是从文件中读出的一个字符。
当打开文件并立即使用fgetc()读文件时,fgetc()函数从文件开始位置读取一个字符。
每读取一个字符后,文件的位置指针后移一个字符位置。
若当前读取的是文本文件,当遇到文件结束标志时,fgetc()函数的返回值为EOF。
9.2.2最基本的文件读写函数,例9-3使用fgetc()函数输出文件example.txt的内容。
/*programe9-3.c*/#includeintmain()charch;FILE*fp;fp=fopen(example.txt,r);while(ch=fgetc(fp)!
=EOF)putchar(ch);fclose(fp);return0;,9.2.2最基本的文件读写函数,例9-4使用feof()进行文件读取控制,输出文件example.txt的内容。
#include#includeintmain(void)charch;FILE*fp;if(fp=fopen(example.txt,r)=NULL)printf(filecannotopen!
n);exit
(1);ch=fgetc(fp);while(!
feof(fp)putchar(ch);ch=fgetc(fp);fclose(fp);return0;,判断被读取的文件是否已经读完。
当文件位置指针越过文件结束标志时,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#defineN4structstudent_typecharname10;intnum;intscore;stud;,intmain()inti;FILE*fp;if(fp=fopen(stu_list,wb)=NULL)printf(Cannotopenfilen);exit
(1);printf(Inputdata,please!
n);for(i=0;iN;i+)scanf(%s%d%d,stud.name,9.3文件的数据块读写操作-fread()函数,例9-6将上述stu_list文件的内容显示在屏幕上。
/*programe9-6-1.c*/#include#include#defineN4structstudent_typecharname10;intnum;intscore;stud;intmain()inti;FILE*fp;if(fp=fopen(stu_list,rb)=NULL)printf(Cannotopenfile.n);exit
(1);for(i=0;iN;i+)fread(,9.3文件的数据块读写操作-fread()函数,再如,设有如下定义:
structstudent_typecharname10;intnum;intage;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文件中读出并显示在屏幕上。
#includeintmain()chars100;inta;FILE*fp;if(fp=fopen(test,w)=NULL)printf(fileopenerror.n);exit(0);fscanf(stdin,%s%d,s,9.4.2文件位置指针的定位,1fseek()函数功能:
改变文件位置指针。
调用形式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。
/*programe9-8.c*/#include#includestructstudent_typecharname10;intnum;intscore;stud;,intmain()inti,size;FILE*fp;size=sizeof(structstudent_type);if(fp=fopen(stu_list,rb+)=NULL)printf(fileopenerror.n);exit
(1);fseek(fp,2*size,0);fread(,9.4.2文件位置指针的定位,2.rewind()函数作用:
将文件位置指针复位。
调用形式rewind(fp);其中:
fp为文件型指针。
执行rewind()函数后,对于fp指向的文件,不管当前的文件位置指针在何处,都使它复位到文件的开始位置。
9.4.1文件位置指针的定位,例9-9在屏幕上显示文件e9-6-2.c的内容,并将该文件复制为文件e9-6-3.c。
/*programe9-9.c*/#includeintmain(void)charch;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);return0;,9.4.2文件位置指针的定位,3.ftell()函数ftell()函数用于获取文件位置指针,其调用形式如下:
ftell(fp);其中:
fp为文件指针。
ftell()函数的返回值是fp所指向文件的当前读写位置,该值是一个长整型数,是位置指针从文件开始处到当前位置的位移量的字节数。
9.4.3ftell()函数,例9-10新建data.txt文件,检查文件位置指针值;然后将字符串Beijing2008写入文件中,再检查文件位置指针的值。
#includestdio.hintmain()FILE*fp;longposition;fp=fopen(data.txt,w);position=ftell(fp);printf(position=%ldn,position);fprintf(fp,Beijing2008);position=ftell(fp);printf(position=%ldn,position);fclose(fp);return0;,9.4.4文件的字符串操作,1fgets()函数一般调用形式fgets(buffer,n,fp);作用从fp指向的文件中读取n-1个字符,然后存储到以buffer为首地址的的内存空间中,通常buffer是一个指针变量名、数组名等。
如果在读入n-1个字符的过程中遇到换行符或EOF,读入即结束。
字符串读入后在最后加一个0字符作为字符串结束标志。
9.4.4文件的字符串操作,2fputs()函数调用形式fputs(buffer,fp);作用将内存buffer中的字符串写到fp指向的文件中,buffer可以是一个字符串常量,也可以是字符串的首地址。
9.4.4文件的字符串操作,例9-11将字符串VisualC+和Visualbasic依次存入文件text中,然后将第一个字符串读出并显示出来。
#includeintmain()FILE*fp;charstring20;fp=fopen(text,w+);fputs(VisualC+n,fp);fputs(Visualbasicn,fp);rewind(fp);fgets(string,20,fp);puts(string);fclose(fp);return0;,9.5文件应用举例,9.5.1文件复制9.5.2存储在文件中的学生数据排序,9.5.1文件复制,例9-12设计一个程序,实现任意文本文件的复制。
问题分析与算法设计由于源文件是任意的,所以源文件名应通过键盘输入;同样,生成的目标文件名也应由键盘输入。
源文件以只读方式打开,目标文件以写方式打开。
从第一个字符开始,顺序逐字符读出源文件,每读出一个字符,立即写入目标文件中。
实现程序,#include#includeintmain(void)charsource20,target20,ch;FILE*fp_s,*fp_t;printf(Enterthesourcefilename:
);scanf(%s,sourceprintf(Enterthetargetfilename:
);scanf(%s,targetif(fp_s=fopen(source,r)=NULLprintf(Cannotopensourcefile.n);exit
(1);if(fp_t=fopen(target,w)=NULLprintf(Cannotopentargetfile.n);exit
(1);while(ch=fgetc(fp_s)!
=EOFfputc(ch,fp_t);fclose(fp_s);fclose(fp_t);return0;,9.5.2存储在文件中的学生成绩排序,例9-13在例9-5中,建立了一个stu_list文件。
编写程序,对该文件的内容按照学习成绩降序排序后显示出来。
问题分析与算法设计定义structstudent_type类型的结构体数组stud。
以只读方式打开stu_list文件,将文件内容读出后存储到stud数组中。
对stud数组按score成员进行降序排序。
输出stud数组。
实现程序,小结,
(1)文件是计算机中的一个重要概念。
C语言中的文件分为设备文件和磁盘文件两类,磁盘文件进一步分为ASCII码文件和二进制文件。
打开文件是使用文件的第一步操作,使用fopen()函数实现,关闭文件是使用文件的最后一步操作,使用fclose()函数实现。
(2)任何打开的文件都对应一个文件指针,文件指针的类型是FILE型,它是在stdio.h中预定义的一种结构体类型。
文件指针和文件使用方式是文件操作的重要概念,任何一个文件被打开时必须指明它的读写方式。
(3)文件操作都是由函数实现的,fgetc()和fputc()函数用于文件的字符读写,fread()和fwrite()函数用于文件的数据块读写,fgets()和fputs()用于文件的字符串读写,fseek()和rewind()函数用于文件随机读写定位,feof()函数用于文件结束状态测试。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文件 程序设计