ImageVerifierCode 换一换
格式:PPT , 页数:50 ,大小:248KB ,
文档编号:3367766      下载积分:25 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-3367766.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(三亚风情)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(《C语言程序设计》第十章文件课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

《C语言程序设计》第十章文件课件.ppt

1、1第十章第十章 文文 件件10.1 C文件概述文件概述10.2 文件的打开与关闭函数文件的打开与关闭函数10.3 文件的读文件的读/写函数写函数10.4 文件处理的其它常用函数文件处理的其它常用函数10.5 文件应用程序设计举例文件应用程序设计举例2文文 件件 概概 述述一、文件的概念和分类:一、文件的概念和分类:文件:一个存储在外部介质上的数据的集合。文件:一个存储在外部介质上的数据的集合。数据文件数据文件-如果文件中存放的都是数据。程序文件程序文件-如果文件中存放提源程序清单或是编绎连接后成的可执行文件。磁盘文件磁盘文件-存放在磁盘上,关闭计算机后文件仍存在,下次开机,可以从磁盘文件中读取

2、数据。1、文件名:能唯一标织某个磁盘文件的就是磁盘文件名磁盘文件名。盘文件名的一般组成:盘符:路径盘文件名的一般组成:盘符:路径文件主名文件主名.扩展名,扩展名,文件主名是由字母开头的字母数字等字符组成的,长度8个字符。扩展名也是由字母开头的字母数字等字符组成的,长度3个字符。32、磁盘文件的打开与关闭通常把从磁盘文件中读取数据到内存称为“文件的打开文件的打开”;把内存中的数据存回到磁盘文件称为“文件的关闭”。使用文件要先打开,使用后,必须关闭。3、缓冲文件系统和非缓冲文件系统缓冲文件系统缓冲文件系统:系统自动设定缓冲区,随着一个文件夹的打开,自动设置一段内存区域作为这个文件的缓冲区。非缓冲文

3、件系统非缓冲文件系统:系统不自动设置缓冲区,要求用户在程序中的打开的文件设置缓冲区。这个内存区是磁盘文件和程序中存放数据的变量、数组之间交换数据的缓冲区域,称为“文件缓冲区文件缓冲区”。44、磁盘文件的分类按数据格式分类:二进制文件、文本文件二进制文件、文本文件按读写方式分类:顺序文件、随机文件顺序文件、随机文件5、设备文件输入/输出设备也看成文件,称为设备文件。常用输入设备是键盘,称标准输入设备;常用输出设备是显示器,称标准输出设备;还有一个专用于输出错误信息的标准错误输出设备,也是指显示器。从输入设备上读取数据,可以看成是从输入设备文件中读取数据;将数据写到输出设备上,可以看成是写到输出设

4、备文件中。5C语言规定,对上述三种标准的输入/输出设备进行数据的读写操作,不必事先打开设备文件,操作后,也可不必关闭设备文件。二、文件型指针二、文件型指针C语言规定文件类型是一种特殊的“结构型结构型”。对这个结构类型,系统已经在名为“stdio.h”的头文件中按下列格式进行了定义:typedef struct int _fd;int _cleft;int _mode;char*nextc;char*buff;FILE;6用“FILE”定义的指针变量通常称为“文件型指针文件型指针”,是专用于文件处理的。文件型指针的定义方法如下:FILE*文件型指针名文件型指针名1,*文件型指针名文件型指针名2,

5、.;其中的“文件型指针名文件型指针名”是用户选取的标识符。7文件的打开与关闭函数文件的打开与关闭函数一、打开文件函数一、打开文件函数【函数头函数头】FILE*fopen(char*filename,char*mode)【参数参数】filename 字符型指针,指向的字符串是要打开的磁盘 文件名。mode 字符型指针,指向的字符串是文件使用的方 式。这两个参数对应的实参可以是字符串常量,也可以是字符数组首地址,或者是指向字符串的指针变量。8文件使用方式可以是下列字符串:r 打开一个已经存在的文本文件,只能读取数据。w 打开一个文本文件,只能写入数据。若文件不存在,则自动建立一个新文件接受写入数据

6、;若文件已存在,则删去旧文件,建立一个同名新文件,接受写入的数据。a 打开一个已存在的文本文件,只能写入数据并且追加 在文件尾部。“r+”打开一个已存在的文本文件,可以读取数据,也可以 写入数据。w+打开一个文本文件,可以读取数据,也可以写入数据。若文件不存在,则自动建立一个新文件接受写入数据;若文件已存在,则删去旧文件,建立一个同名新文件,接受写入的数据。a+打开一个已经存在的文本文件,可以读取数据,也可以 写数据到文件尾部。9rb 打开一个已经存在的二进制文件,只能读取数据。wb 打开一个二进制文件,只能写入数据。若文件不存在,则自动建立一个新文件接受写入数据;若文件已存在,则删去旧文件,

7、建立一个同名新文件,接受写入的数据。ab 打开一个已存在的二进制文件,只能写入数据并且追 加在文件尾部。rb+打开一个已存在的二进制文件,可以读取数据,也可 以写入数据。wb+打开一个二进制文件,可以读取数据,也可以写入数据。若文件不存在,则自动建立一个新文件接受写入数据;若文件已存在,则删去旧文件,建立一个同名新文件,接受写入的数据。ab+打开一个已经存在的二进制文件,可以读取数据,也可 以写数据到文件尾部。10【功能功能】以mode指定的“使用方式使用方式”,打开filename指定的“文件名文件名”对应的文件,同时自动给该文件分配一个内存缓冲区。【返回值返回值】能正确打开指定的文件,则返

8、回一个指向“文文件型变量件型变量”的地址;如果打开文件出现错误,返回值为“NULL”,表示打开文件错误。“NULL”代表空,其值为“0”。在文件打开之前,应该定义文件型指针,以便接受打开文件函数返回的地址。打开文件时,一般要对返回值进行判断,如果返回值为“NULL”,则表示文件打开出错,不能使用这个文件,应提示用户,并中止程序的运行。11二、关闭文件函数二、关闭文件函数【函数头函数头】int fclose(FILE*fp)【参数参数】fp 文件型指针,通过fopen()()函数获得的、已指向某个打开的文件。【功能功能】关闭fp所指向的文件,同时自动释放分配给 文件的内存缓冲区。【返回值返回值】

9、能正确关闭指定的文件,则返回0;否则返回非非0。12下面的程序说明了文件的打开与关闭的常用方式:#include stdio.h FILE*fp;.if(fp=fopen(文件名文件名,文件使用方式文件使用方式)=NULL)printf(file can not open!n);exit(0);.fclose(fp);13三、标准设备文件的打开与关闭三、标准设备文件的打开与关闭三种标准输入/输出设备的使用不必事先打开对应的设备文件,因为在系统启动后,已自动打开这三个设备文件,并且为它们各自设置了一个文件型指针,名称如下:标准设备名称 对应文件型指针名 标准输入设备(键盘)stdin 标准输出设

10、备(显示器)stdout 标准错误输出设备(显示器)stderr14文件的读文件的读/写函数写函数一、文件尾测试函数一、文件尾测试函数【函数头函数头】int feof(FILE*fp)【参数参数】fp 文件型指针,通过fopen()函数获得的,已指向某个打开文件。【功能功能】测试fp所指向的文件是否到达文件尾。是文件 尾返回非非0,否则返回0。【返回值返回值】若当前是文件尾,返回非非0,否则返回0。15二、字符读二、字符读/写函数写函数1、写字符函数【函数头函数头】int fputc(char ch,FILE*fp)【参数参数】ch 写到文件中的字符,可以是字符常量、字符 变量等。fp 文件型

11、指针,通过fopen()函数获得的、已 指向某个打开的可写文件。该文件可以是文本 文件,也可以是二进制文件。【功能功能】将ch中的字符写到fp所指向的文件的当前位置。【返回值返回值】正确,则返回刚写到文件中的字符;错误,则返 回EOF(符号常量,其值为1)。16例 1 从键盘输入10个字符,写到a盘根目录下名为“char2.txt”的文本文件中。程序清单如下:#include stdio.h main()FILE*fp;int i;char c;if(fp=fopen(a:char2.txt,w)=NULL)printf(file can not open!n);exit(0);for(i=0

12、;i10;i+)c=getchar();fputc(c,fp);fclose(fp);172、读字符函数【函数头函数头】int fgetc(FILE*fp)【参数参数】fp 文件型指针,通过fopen()函数获得的、已指向某个打开的可读文件。该文件可以 是文本文件、也可以是二进制文件。【功能功能】从fp所指向的文件当前位置读取单个字符。【返回值返回值】正确,则返回读取的单个字符;错误,则 返回EOF(1)。18例2 从a盘根目录下名为“char2.txt”的文本文件中读取前10个字符,依次显示在屏幕上。如果文本文件中不足10个字符,则有多少个字符读取并显示多少个字符。程序清单如下:#inclu

13、de stdio.hmain()FILE*fp;int i;char c;if(fp=fopen(a:char2.txt,r)=NULL)printf(file can not open!n);exit(0);19for(i=0;i10;i+)if(feof(fp)break;c=fgetc(fp);putchar(c);fclose(fp);例3 编一个函数完成文本文件的复制,源文件和目标文件名作为函数参数。函数清单如下:#include stdio.h void my_copy(fname1,fname2)char*fname1;char*fname2;20 FILE*fp1,*fp2;i

14、f(fp1=fopen(fname1,r)=NULL)printf(file can not open!n);exit(0);if(fp2=fopen(fname2,w)=NULL)printf(file can not open!n);exit(0);while(!feof(fp1)fputc(fgetc(fp1),fp2);fclose(fp1);fclose(fp2);return;21三、字符串读三、字符串读/写函数写函数读/写字符函数处理的文件类型是文本文件,读写的数据是以字符串的单位。1、写字符串函数【函数头函数头】int*fputs(char*str,FILE*fp)【参数参数】

15、str字符型指针,可以是字符串常量,或存放待输 出字符串的字符数组首地址,也可以是指向待输 出字符串的指针变量。fp文件型指针,通过fopen()函数获得的、已指向 打开的可写文本文件。【功能功能】将str指向的一个字符串,舍去结束标记0后写入 fp所指向的文件中。22【返回值返回值】正确,则返回写入文件的实际字符数;错误,则返回EOF(1)。例4 从键盘上读取3个字符串,依次写入a盘根目录下名为“string1.txt”的文本文件。程序清单如下:#include stdio.h main()FILE*fp;int i;char s13100,s23100;for(i=0;i3;i+)gets

16、(s1i);if(fp=fopen(a:string1.txt,w)=NULL)printf(file can not open!n);exit(0);23 for(i=0;i3;i+)fputs(s1i,fp);fclose(fp);2、读字符串函数【函数头函数头】char*fgets(char*str,int n,FILE*fp)【参数参数】str 字符型指针,可以是存放字符串的字符数组 首地址,也可以是指向某个能存放字符串的 内存区域的指针变量。n 整型,可以是整型常量、变量或表达式。fp 文件型指针,通过fopen()函数获得的、已指 向打开的可读文本文件。24【功能功能】从fp所指向

17、的文件当前位置读取n1个字符,在其后补充一个字符串结束标记0,组成字符串并存入str指定的内存区。如果读取的前n1个字符时有“回车符回车符”,则只读到回车符为止,补充结束标记0组成字符串(包括回车符),回车符后的字符将不再读取。如果读取的前n1个字符时遇到文件尾,则将读取的字符后面补充结束标记0组成字符串。【返回值】正确,则返回str对应的地址;错误,则返回NULL(0)。当正确地读取了1个字符串后,文件内部指针会自动后移1个字符串的位置。25例5 从a盘根目录下名为“string1.txt”的文本文件中读取一个字符串或前20个字符组成字符串,并显示在屏幕上。程序清单如下:#include s

18、tdio.h main()FILE*fp;char s21;if(fp=fopen(a:string1.txt,r)=NULL)printf(file can not open!n);exit(0);fgets(s,21,fp);fputs(s,stdout);fclose(fp);26 虽然可以使用以前介绍的puts()函数将字符串输出到显示器,但fputs()函数在输出时是舍弃了这个结束标记0。四、数据读四、数据读/写函数写函数 读写数据函数处理的文件类型主要是二进制文件,也可以是文本文件(数据是字符型)。读写的数据可以是字符型、整型、实型,也可以是结构型等。1、写数据函数【函数头函数头】

19、int fwrite(char*buf,unsigned size,unsigned n,FILE*fp)27【参数参数】buf 字符型指针,可以是存放数据的变量地址或数组 首地址,也可以是指向某个变量或数组的指针变 量。size 无符号整型,可以是整型常量、变量或表达式。代表写入文件的每个数据所占用的字节总数。通 常使用表达式“sizeof(数据类型符数据类型符)”。n 无符号整型,可以是整型常量、变量或表达式。代表写入文件的数据的个数(注意每个数据是 size个字节)。fp 文件型指针,通过fopen()函数获得的、已指向打 开的可写文件。28【功能功能】将buf指向的n个数据(每个数据的

20、字节数为size)写入fp指向的文件。【返回值返回值】正确,则返回n值;错误,则返回NULL(0)。当正确地写入文件n个数据后,文件内部指针会自动后移nsize个字节的位置。例6 从键盘上读取10个整型数据,写入a盘根目录下名为“intb1.dat”的二进制数据文件中。程序清单如下:29#include stdio.h main()FILE*fp;int a10,*p=a;if(fp=fopen(a:intb1.dat,wb)=NULL)printf(file can not open!n);exit(0);while(pa+10)scanf(%d,p+);fwrite(a,sizeof(in

21、t),10,fp);fclose(fp);302、读数据函数【头函数头函数】int fread(char*buf,unsigned size,unsigned n,FILE*fp)【参数参数】buf 字符型指针,可以是存放数据的变量地址或数组 首地址,也可以是指向某个变量或数组的指针变 量。size 无符号整型,可以是整型常量、变量或表达式。代表读取文件的每个数据所占用的字节总数。通 常使用表达式“sizeof(数据类型符数据类型符)”。n 无符号整型,可以是整型常量、变量或表达式。代表读取文件的数据(size个字节)的个数。fp 文件型指针,通过fopen()函数获得的、已指向打 开的可读文

22、件。31【功能功能】从fp所指向的文件当前位置读取n个数据,每个数据的 字节数为size,共组成n个长度为size的数据存入but指 定的内存区。【返回值返回值】正确,则返回n值;错误,则返回NULL(0)。当正确地读取了n个数据后,文件内部指针会自动后移nsize个字节的位置。例7 从a盘根目录下名为“intb1.dat”的二进制数据文件中读取10个整数,输出到显示器上。程序清单如下:32#include stdio.h main()FILE*fp;int i,a10;if(fp=fopen(a:intb1.dat,rb)=NULL)printf(file can not open!n);e

23、xit(0);fread(a,sizeof(int),10,fp);for(i=0;i10;i+)printf(%d ,ai);fclose(fp);33文件处理的其它常用函数文件处理的其它常用函数1、文件头定位函数【函数头函数头】int rewind(FILE*fp)【参数参数】fp 文件型指针,通过fopen()函数获得的、已指向某 个打开的文件。【功能功能】将文件内部指针置于fp所指向的文件开头。【返回值返回值】正确,返回0;错误,返回非非0。例8 复制a盘当前目录下名为“char2.txt”的文本文件到b盘根目录下,文件名相同。然后再显示这两个文件中的内容。程序清单如下:34#incl

24、ude stdio.h main()FILE*fp1,*fp2;char c;char*fname1=a:char2.txt,*fname2=b:char2.txt;if(fp1=fopen(fname1,r)=NULL)printf(file can not open!n);eixt(0);if(fp2=fopen(fname2,w)=NULL)printf(file can not open!n);eixt(0);while(!feof(fp1)c=fgetc(fp1);fputc(c,fp2);rewind(fp1);35 while(!feof(fp1)putchar(fgetc(fp

25、1);fclose(fp2);if(fp2=fopen(fname2,r)=NULL)printf(file can not open!n);exit(0);while(!feof(fp2)putchar(fgetc(fp2);fclose(fp1);fclose(fp2);362、文件随机定位函数【函数头函数头】int fseek(FILE*fp,long offset,int from)【参数参数】fp 文件型指针,通过fopen()函数获得的、已指向 某个打开的文件。offset 长整型表达式,表示从from为起始位置的偏移字 节数。可以取正数(向文件尾方向移动)、0(不移动)、负数(向

26、文件头方向移动)。from 确定起始位置的参数。可以选取下列整型数或名称:整数 0 1 2 名称 SEEK_SET SEEK_CUR SEEK_END 起始位置 文件头文件头 内部指针的当前位置内部指针的当前位置 文件尾文件尾37【功能功能】将fp所指向的文件内部指针从from指定的起始位置移动offset个字节,指向新的位置。【返回值返回值】正确,返回0;错误,返回非非0。例如:fseek(fp,20L,1)表示从当前位置后移20个字节的 位置;fseek(fp,-10L,SEEK_END)表示从文件尾开始前移10 个字节的位置。注意,偏移量如果使用常数,则必须是长整型的,即整数后要加“L”

27、,或“l”。如果使用表达式,可以用“(long)()(表达表达式)式)”强制转换成长整型。38例9 设a盘根目录下有一个名为“intb1.dat”的二进制文件,其中连续存放了10个整数。要求读取并显示其中第1、3、5和第9、10个数据。程序清单如下:#include stdio.h main()FILE*fp;int i,x;if(fp=fopen(a:intb1.dat,rb)=NULL)printf(file can not open!n);exit(0);for(i=0;i3;i+)fseek(fp,(long)(i*sizeof(int),0);fread(&x,sizeof(int)

28、,1,fp);printf(%d.%dn,2*i+1,x);39 fseek(fp,-2L*sizeof(int),SEEK_END);fread(&x,sizeof(int),1,fp);printf(%d.%dn,9,x);fseek(fp,-1L*sizeof(int),SEEK_END);fread(&x,sizeof(int),1,fp);printf(%d.%dn,10,x);fclose(fp);403、错误测试函数【函数头函数头】int ferror(FILE*fp)【参数参数】fp 文件型指针,通过fopen()获得的、已指向某个打 开的文件。【功能功能】测试fp所指向的文件

29、在最近一次的操作(包括读写、定位等)时是否发生错误。有错,则返回非非0值;无 错,则返回0值。【返回值返回值】无错误,返回0;有错误,返回非非0。例10 重编上例的程序。要求使用错误测试函数来判断文件操作中是否发生错误。程序清单如下:41#include stdio.h void pro_err(fp)FILE*fp;if(ferror(fp)!=0)printf(file can not open!n);exit(0);else return;main()FILE*fp;int i,x;if(fp=fopen(a:intb1.dat,rb)=NULL)printf(file can not

30、open!n);exit(0);42for(i=0;i3;i+)fseek(fp,(long)(i*sizeof(int),0);pro_err(fp);fread(&x,sizeof(int),1,fp);pro_err(fp);printf(%d.%dn,2*i+1,x);fseek(fp,-2L*sizeof(int),SEEK_END);pro_err(fp);fread(&x,sizeof(int),1,fp);pro_err(fp);printf(%d.%dn,9,x);fseek(fp,-1L*sizeof(int),SEEK_END);pro_err(fp);fread(&x,

31、sizeof(int),1,fp);pro_err(fp);printf(%d.%dn,10,x);fclose(fp);43文件应用程序设计举例文件应用程序设计举例例11 设a盘根目录下面有一个名为“char2.txt”的文本文件。编一个程序,将该文件中的所有小写字母换成大写字母。程序清单如下:#include stdio.h#include ctype.hmain()FILE*fp;char c;if(fp=fopen(a:char2.txt,r+)=NULL)print(file can not open!n);exit(0);44while(!feof(fp)c=fgetc(fp);i

32、f(islower(c)!=0)c=toupper(c);fseek(fp,-1L,1);fputc(c,fp);fseek(fp,0L,1);fclose(fp);45例12 编一个函数,比较两个文本文件是否完全相同,若相同则返回值为1;若不相同则返回值为0。两个文本文件名作为函数的参数。函数清单如下:#include stdio.hint my_comp(fname1,fname2)char*fname1,*fname2;FILE*fp1,*fp2;int flag=1;char c1,c2;if(fp1=fopen(fname1,r)=NULL)printf(file can not o

33、pen!n);exit(0);46if(fp2=fopen(fname2,r)=NULL)printf(file can not open!n);exit(0);while(1)if(feof(fp1)&(feof(fp2)flag=1;break;if(feof(fp1)&(!feof(fp2)flag=0;break;if(!feof(fp1)&(feof(fp2)flag=0;break;c1=fgetc(fp1);c2=fgetc(fp2);if(c1!=c2)flag=0;break;fclose(fp1);fclose(fp2);return(flag);47课堂练习 1、若要用f

34、open函数打开一个新的二进制文件,该文件要既能读也能写,则文件方式字符串应是 。A)ab+B)wb+C)rb+D)ab答案:B 482、显示文本文件的内容并将行号显示出来。答案:#include#define LONGARRAY 256main()/*注:对文件操作的库函数,函数原型均在头文件stdio.h中 char buffLONGARRAY;/*buff is a char array*/int c,lcnt;FILE*fp;/*注意:结构类型名“FILE”必须大写*/char file20;puts(Input a file name:);scanf(%s,file);if(fp=f

35、open(file,r)=NULL)printf(nfile%s cant openedn,file);exit();lcnt=0;while(fgets(buff,LONGARRAY,fp)!=NULL)printf(%3d:%s,+lcnt,buff);fclose(fp);49 分析:(1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。(2)关于exit()函数 用法:void exit(程序状态值);功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将“程序状态值”返回给操作系统。当“程序状态值”为时,表示程序正常退出;非值时,表示程序出错退出。(3)“r(b)+”与“a(b)+”的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。50课程结束,再见!

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|