收藏 分享(赏)

北京科技大学C语言第8章PPT.ppt

上传人:dzzj200808 文档编号:3330580 上传时间:2018-10-14 格式:PPT 页数:54 大小:281KB
下载 相关 举报
北京科技大学C语言第8章PPT.ppt_第1页
第1页 / 共54页
北京科技大学C语言第8章PPT.ppt_第2页
第2页 / 共54页
北京科技大学C语言第8章PPT.ppt_第3页
第3页 / 共54页
北京科技大学C语言第8章PPT.ppt_第4页
第4页 / 共54页
北京科技大学C语言第8章PPT.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、1,第8章 文件,北京科技大学 计算机系,C 语言程序设计,2018/10/14,2,文件,文件和文件类型指针文件的打开与关闭文本文件的读写二进制文件的读写文件读写指针定位函数小结,2018/10/14,3,文件,前几章中的程序 数据输入:键盘 数据输出:显示器 实际应用中,需要将数据以文件的形式长期保存在计算机外存中 C语言提供输入/输出函数,用于完成数据文件的建立、读写、追加等处理,2018/10/14,4,8.2 文件和文件类型指针,文件是指存储在外部存储介质上相关数据的集合,1 何谓文件,每个文件必须赋以一个文件名,它是文件的重要标识 程序通过文件名访问文件,处理数据 操作系统按文件名

2、对文件进行管理,C语言把文件作为一个字符(字节)序列处理 对文件的存取是以字符(字节)为单位进行的,2018/10/14,5,8.2 文件和文件类型指针,按其存放内容分 程序文件 数据文件 按照对文件的不同处理方式分 缓冲文件 非缓冲文件,2 文件的种类,2018/10/14,6,8.2 文件和文件类型指针,按其存放的代码形式分 ASCII文件 二进制文件,2 文件的种类,2018/10/14,7,8.2 文件和文件类型指针,用缓冲文件系统处理的文件称为缓冲文件 系统在内存中为每个正在使用的缓冲文件开辟一个缓冲区,其大小是512字节 对文件读写数据都通过缓冲区进行,3 缓冲文件和文件指针,20

3、18/10/14,8,8.2 文件和文件类型指针,文件指针是指向含有文件信息的结构体类型指针 此结构体类型由系统定义 在stdio.h文件中将其定义为FILE类型 缓冲文件系统自动为每一个正在使用中的文件分配一个FILE类型变量,用于存放该文件的有关信息定义形式为:FILE *fp;,3 缓冲文件和文件指针,2018/10/14,9,8.2 文件和文件类型指针,外部设备中的3个特殊的设备文件 标准输入文件 文件指针为stdin,系统指定为键盘 标准输出文件 文件指针为stdout,系统指定为显示器 标准错误输出文件 文件指针为stderr,系统指定为显示器 输出错误信息,4 标准文件,2018

4、/10/14,10,8.2 文件和文件类型指针,利用非缓冲文件系统处理的文件 系统处理非缓冲文件时 不为文件开辟缓冲区 需要程序员自行设计并管理缓冲区 非缓冲文件系统处理的文件大都是二进制文件 即使使用非缓冲文件系统建立ASCII文件,其文件结尾处也和二进制文件一样,没有文件结束标志,系统靠文件长度判断其是否结束,5 非缓冲文件,2018/10/14,11,8.3 文件的打开与关闭,对文件的操作一般都需要经过3个步骤: 打开文件 读写文件 关闭文件,C语言中分别用不同的函数 实现这些文件操作,2018/10/14,12,8.3 文件的打开与关闭,调用的一般格式为: fopen(文件名,文件使用

5、方式)功能: 按指定的使用方式打开指定的文件,并为该文件分配一个文件缓冲区和一个FILE类型变量 若成功地打开指定文件,则返回一个指向该文件的FILE类型指针(即系统为其分配的FILE类型变量的首地址) 若文件打开失败,则返回NULL,1 文件打开函数 fopen( ),2018/10/14,13,8.3 文件的打开与关闭,说明: 调用函数时,文件名应是字符串表示形式 文件使用方式也应是字符串表示形式 调用该函数时,必须用include命令包含stdio.h文件调用时通常采用的形式: fp=fopen(文件名,文件使用方式); /*设fp已定义为FILE类型指针*/,1 文件打开函数 fope

6、n( ),2018/10/14,14,8.3 文件的打开与关闭,1 文件打开函数 fopen( ),2018/10/14,15,8.3 文件的打开与关闭,打开文件过程中存在出错的可能性,1 文件打开函数 fopen( ),检查的常用方法: if(fp=fopen(“filel.dat“,“w“)=NULL)printf(“Cant open this filen“);exit(0);,判断以写方式新建并打开“filel.dat”文件是否成功 其中exit函数的作用是结束程序的执行,并将实参0作为函数返回值传给操作系统,2018/10/14,16,8.3 文件的打开与关闭,调用的一般格式为: f

7、close(文件指针);功能: 关闭文件指针所指向的文件,释放该文件的缓冲区及FILE类型变量 若成功地关闭文件,则返回0 若文件关闭失败,则返回EOF,2 文件关闭函数 fclose( ),2018/10/14,17,8.3 文件的打开与关闭,说明: 文件指针是FILE类型的指针,且必须是fopen()返回的文件指针 EOF是系统定义的文本文件结束标志,其值为(-1) 调用该函数时,必须用include命令包含stdio.h文件,2 文件关闭函数 fclose( ),2018/10/14,18,8.3 文件的打开与关闭,应及时关闭不再使用的文件,2 文件关闭函数 fclose( ),操作系统

8、允许同时打开的文件个数是有限的,在程序设计中应养成及时关闭文件的习惯,系统配置的缓冲区个数也是有限的,程序对文件的读写都是通过缓冲区进行的,2018/10/14,19,8.4 文本文件的读写,8.4.1 文件的字符输入/输出函数,运用字符输入输出函数、字符串输入输出函数和格式输入输出函数可以实现对文本文件的读写 它们的原型说明都在stdio.h文件中 因此调用这些函数时,必须在程序中加入预处理命令: #include 或#include “stdio.h”,2018/10/14,20,8.4.1 文本的字符输入/输出函数,1 字符输出函数 fputc( ),fputc(ch,fp) 其中 ch

9、是字符数据,可以是自负常量,也可以是字符变量 fp是文件指针变量,指向以写方式打开的文件 功能: 把ch所表示的字符的ASCII值写入fp所指向的文件,并返回写入文件的字符代码值 若调用失败,则返回EOF,2018/10/14,21,8.4.1 文本的字符输入/输出函数,1 字符输出函数 fputc( ),说明: putc函数与fputc函数的功能相同在stdio.h文件中被定义为:#define putc(c,f) fputc(c),f) 标准文件中用的putchar函数是fputc函数的特殊用法在stdio.h文件中被定义为:#define putchar(c) putc(c),stdou

10、t),2018/10/14,22,8.4.1 文本的字符输入/输出函数,2 字符输入函数 fgetc( ),调用的一般格式为:fgetc(fp)其中fp是文件指针变量,并且它指向的文件是以读方式打开的文件 功能: 从fp所指向的文件中读取一个字符的ASCII值,并返回从文件中读出的字符代码值 若文件结束或调用失败,则返回EOF,2018/10/14,23,8.4.1 文本的字符输入/输出函数,2 字符输入函数 fgetc( ),说明: getc函数与fgetc函数的功能相同在stdio.h文件中被定义为:#define getc(f) fgetc(f) 标准文件中用的getchar函数是fge

11、tc函数的特殊用法在stdio.h文件中被定义为:#define getchar() getc(stdin),2018/10/14,24,8.4.1 文本的字符输入/输出函数,【例8-1】利用fputc和fgetc函数建立一个文本文件,并显示文件中的内容,#include “stdio.h“ #include “stdlib.h“ main() FILE *fp; /*定义一个文件指针变量fp*/int c; /*c为存放字符的变量*/char filename40; /*filename用于存放数据文件名*/printf(“filename:“); /*提示输入磁盘文件名*/gets(fil

12、ename); if(fp=fopen(filename,“w“)=NULL) printf(“Cant open the %sn“,filenameexit(1); /*新建并打开一个文本文件,同时测试是否成功*/,2018/10/14,25,8.4.1 文本的字符输入/输出函数,while(c=getchar()!=EOF) putc(c,fp); /*将键盘输入的字符写到文件中*/ fclose(fp); /*建立文件结束,关闭文件*/printf(“outfile:n“);fp=fopen(filename,“r“); /*以读方式打开文本文件*/while(c=getc(fp)!=E

13、OF) /*当未读到文件结束标志时*/putchar(c); /*在显示器显示读出的字符*/fclose(fp); /*读文件结束,关闭文件*/ ,先把键盘文件读取的内容逐个字符地保存到一个新建立的磁盘文件中,然后再以读方式打开磁盘文件,将文件内容原样显示,2018/10/14,26,8.4.1 文本的字符输入/输出函数,3 文件结束测试函数 feof( ),EOF是文本文件结束标志 在stdio.h文件中定义为: # define EOF (-1)对文本文件进行读操作时 当fgetc()返回EOF,即可作文件结束处理 在二进制文件中不设EOF标志,2018/10/14,27,8.4.1 文本

14、的字符输入/输出函数,3 文件结束测试函数 feof( ),调用的一般格式为:feof(fp) 其中 fp是文件指针变量,指向一个打开的文件 功能: 测试fp所指向的文件是否已读到文件尾部 若该文件没有结束,则返回0 若文件结束,则返回非0值,2018/10/14,28,8.4.1 文本的字符输入/输出函数,【例8-1】复制一个磁盘文件,#include “stdio.h“ #include “stdlib.h“ void main(int argc,char *argv) FILE *infp,*outfp; char infile40,outfile40; int c;if(argc3)

15、if(argc=2) printf(“output filename: “); gets(outfile);argv2=outfile; else printf(“input filename:“); gets(infile);printf(“output filename:“); gets(outfile);argv1=infile;argv2=outfile;,定义源文件指针和目标文件指针,定义字符数组, 存放源文件名和目标文件名,如果只有一个数据文件名,则提示输入目标文件名,如果没有数据文件名,则提示输入源文件名和目标文件名,2018/10/14,29,8.4.1 文本的字符输入/输出函

16、数,if(infp=fopen(argv1,“r“)=NULLprintf(“Cant open the %sn“,argv1);exit(1); if(outfp=fopen(argv2,“w“)=NULLprintf(“Cant open the %sn“,argv2);exit(2); c=getc(infp); while(!feof(infp) putc(c,outfp); c=getc(infp); fclose(infp); fclose(outfp); printf(“okn“); ,该程序采用了带参主函数。,以读方式打开源文件并测试是否成功,新建并打开目标文件,测试是否成功,

17、将源文件读取的字符写到目标文件中,2018/10/14,30,8.4.2 文本的字符串输入输出函数,1 字符串输出函数 fputs( ),调用的一般格式为:fputs(str,fp) str是字符串形式 可以是字符串常量 也可以是存放字符串的字符数组名或指向字符串的指针 fp是文件指针变量 指向以写方式打开的文件,2018/10/14,31,8.4.2 文本的字符串输入输出函数,1 字符串输出函数 fputs( ),功能: 将字符串(不包括字符串结束标志0)写到文件指针fp所指向的文件中 若调用成功,则返回非0值 若调用失败,则返回0 说明: fputs与puts函数的功能类似,亦有区别,20

18、18/10/14,32,8.4.2 文本的字符串输入输出函数,2 字符串输入函数 fgets( ),调用的一般格式为:fgets(str,n,fp) str是字符指针形式 可以是字符数组名或指向字符数组的指针变量 fp是文件指针 指向以读方式打开的文件 n指定读取n-1个字符,2018/10/14,33,8.4.2 文本的字符串输入输出函数,2 字符串输入函数 fgets( ),功能: 从文件指针fp所指向的文件中,读取n-1个字符后,加上字符串结束标志0组成一个字符串,存入字符数组中 若调用成功,则返回字符数组的首地址 若文件结束或调用失败,则返回NULL,2018/10/14,34,8.4

19、.2 文本的字符串输入输出函数,2 字符串输入函数 fgets( ),fgets与gets函数的区别gets函数以换行符作为行结束标志,并舍去换行符fgets函数也以换行符作为行的读结束标志,但换行符同时还作为字符串的内容,2018/10/14,35,8.4.2 文本的字符串输入/输出函数,【例8-3】应用fputs和fgets函数,建立和读取文本文件,main() FILE *fp; /*定义一个文件指针变量fp*/char filename40,str81; /*filename用于存放数据文件名*/,while(strlen(gets(str)0)fputs(str,fp);fputc(

20、n,fp); fclose(fp); /*将键盘输入的字符串写到文件中,加入换行符作为字符串分隔符,直到键盘输入空串(即回车)*/,fp=fopen(filename,“r“); while(fgets(str,81,fp)!=NULLprintf(“%s“,str); fclose(fp); /*将文件中读取的字符串在屏幕上分行显示 */,2018/10/14,36,8.4.3 文本的格式输入/输出函数,1 格式输出函数 fprintf( ),调用的一般格式为: fprintf(文件指针,格式控制串,输出项参数表) 功能: 将输出项按指定格式写入由文件指针所指向的文件中 若调用成功,则返回写

21、入的字节数 若调用失败,则返回EOF 说明:写入文件的信息均是ASCII 值形式,2018/10/14,37,8.4.3 文本的格式输入/输出函数,2 格式输入函数 fscanf( ),调用的一般格式为: fscanf(文件指针,格式控制串,地址表) 功能: 按格式控制串所描述的格式,从文件指针所指向的文件中读取数据,送到指定的内存地址单元中 若调用成功,则返回实际读出的数据项个数 若没有读数据项,则返回0 若文件结束,则返回EOF,2018/10/14,38,8.5 二进制文件的读写,如果需要在内存与磁盘文件之间频繁交换数据,最好采用二进制文件 二进制文件存储信息的形式与内存中存储信息的形式

22、是一致的 二进制文件一般是同类型数据的集合,数据之间无分隔符,每个数据所占字节数是一个定值调用这些函数时,必须在程序中加入 #include,2018/10/14,39,8.5.1 文件的字输入/输出函数,1 字输出函数 putw( ),调用的一般格式为: putw(w,fp) w是要输出的整型数据,它可以是常量,也可以是变量 fp是文件指针,指向以写方式打开的二进制文件,把整型数w写入fp所指向的文件 若调用成功,则返回w值 若调用失败,则返回EOF,2018/10/14,40,8.5.1 文件的字输入/输出函数,2 字输入出函数 getw( ),调用的一般格式为: getw(fp) fp是

23、文件指针,指向以读方式打开的二进制文件,若调用成功,则返回从文件中读取的整数若文件结束或调用失败,则返回EOF,2018/10/14,41,8.5.1 文件的字输入/输出函数,3 文件操作错误函数 ferror( ),调用的一般格式为: ferror(fp) fp为文件指针,指向已打开并需要进行检测的文件,若出错,则指示器置l否则指示器置0,若错误指示器置1后,只有调用clearerr函数或rewind函数才能将其清0,2018/10/14,42,8.5.1 文件的字输入/输出函数,4 清除错误标志函数 clearerr( ),调用的一般格式为 clearerr(fp) 其中fp为文件指针,指

24、向已打开的文件,将文件的错误指示器和文件结束指示器清0 该函数无返回值,2018/10/14,43,8.5.2 文件的数据块输入/输出函数,C程序中除了可以建立整型二进制文件外,还可建立 实型二进制文件 结构体类型二进制文件 对于这些文件的读写,可运用数据块输入输出函数实现,2018/10/14,44,8.5.2 文件的数据块输入/输出函数,1 数据块输出函数 fwrite( ),调用的一般格式为: fwrite(p,size,n,fp) p是某类型指针 size是该类型数据在内存中所占字节数,可用sizeof运算获得 n是此次写入文件的数据项数 fp是文件指针变量,指向以写方式打开的文件,将

25、p指向的内存存储区中n个数据项写入文件指针fp所指向的文件,每个数据项的大小为size个字节 若调用成功,则返回实际写入的数据项数 若调用失败,则返回0值,2018/10/14,45,8.5.2 文件的数据块输入/输出函数,2 数据块输入函数 fread( ),调用的一般格式为: fread(p,size,n,fp) p是某类型指针 size是该类型数据在存储时所需字节数 n是此次读取的数据项数 fp是文件指针变量,指向以读方式打开的文件,从文件指针fp所指向的文件中,读取n个数据项,存放到p所指向的存储区域。每个数据项的大小为size 个字节 若调用成功,则返回实际读取的数据项数 若文件结束

26、或调用失败,则返回0值,2018/10/14,46,8.5 二进制文件的读写,【例8-5】应用putw和getw 函数建立二进制整型数据文件并读取其中的数据【例8-6】应用fwrite与fread函数建立一个存放学生电话簿的二进制数据文件并读取其中的数据,2018/10/14,47,8.6 文件读写指针定位函数,C语言将文件作为字符流处理 要对文件进行随机存取,就需要借助于文件读写指针的移动,其移动单位是字节,2018/10/14,48,8.6 文件读写指针定位函数,1 文件读写指针移动函数 fseek( ),调用的一般格式为: fseek(fp,offset,whence) fp是文件指针,

27、指向被操作的文件 offset是位移量,单位是字节 如果是正整数,文件读写指针向文件尾部方向移动 如果是负整数,则向文件头部移动 whence是起始位置标志,将文件读写指针从whence标识的位置移动offset个字节,并将文件结束指示器清0 若调用成功,则返回0 若调用失败,则返回非0值,2018/10/14,49,8.6 文件读写指针定位函数,1 文件读写指针移动函数 fseek( ),说明: 起始位置标志,在stdio.h文件中有定义该函数仅适用于二进制文件,常量标识符 值 起始位置 SEEK_SET 0 文件开始位置 SEEK_CUR 1 文件读写指针的当前位置 SEEK_END 2

28、文件结束位置,2018/10/14,50,8.6 文件读写指针定位函数,2 文件读写回绕函数 rewind( ),调用的一般格式为: rewind(fp) 其中fp是文件指针,指向被操作的文件,将文件读写指针移到文件开始位置,并将文件结束指示器和错误指示器清0 该函数无返回值,该函数可应用于二进制文件和文本文件,2018/10/14,51,8.6 文件读写指针定位函数,3 文件读写指针位置函数 ftell( ),调用的一般格式为: ftell(fp) 其中fp是文件指针,指向被操作的文件,返回fp指向的文件中的读写指针当前位置,即相对于文件开始处的位移量,单位是字节 若调用成功,则返回文件读写

29、指针当前值 若调用失败,则返回-1,该函数可应用于二进制文件和文本文件,2018/10/14,52,8.6 文件读写指针定位函数,【例8-7】fseek函数和rewind函数的使用,#include “stdio.h“ #include “stdlib.h“ void main() FILE *fp; /*定义一个文件指针变量fp*/char filename40; /*filename存放数据文件名*/int i,n1,n2,x255,y255,z,pn;,printf(“filename:“);gets(filename);if(fp=fopen(filename,“wb+“)=NULLp

30、rintf(“Cant open the %sn“,filename);exit(1); printf(“n=“);scanf(“%d“, /*pn存放整型数据存储时字节数*/,2018/10/14,53,8.6 文件读写指针定位函数,fwrite(,printf(“%dn“,z);scanf(“%d“,程序运行情况如下: filename:d:fdata.dat n=8 10 20 30 40 50 60 70 80 40 48 10 20 30 48 50 60 70 80,2018/10/14,54,本章小结,基本概念 磁盘文件和设备文件 文件的组织形式和存取方式 文件类型指针的概念和使用文件的基本操作 文件的打开与关闭操作 文本文件和二进制文件的读写操作 定位函数的使用,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报