资源目录
压缩包内文档预览:(预览前20页/共26页)
编号:21836451
类型:共享资源
大小:13.43MB
格式:ZIP
上传时间:2019-09-06
上传人:QQ24****1780
认证信息
个人认证
王**(实名认证)
浙江
IP属地:浙江
25
积分
- 关 键 词:
-
大学
语言程序设计
任正云
课件
ppt
- 资源描述:
-
大学C语言程序设计-任正云-课件PPT,大学,语言程序设计,任正云,课件,ppt
- 内容简介:
-
第十章 文件,10.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统数据管理的单位,使用数据文件的目的 1、数据文件的改动不引起程序的改动程序与数据分离 2、不同程序可以访问同一数据文件中的数据数据共享 3、能长期保存程序运行的中间数据或结果数据,文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(键盘、显示器、打印机等) 按数据的组织形式: 文本文件: ASCII文件,每个字节存放一个字符的ASCII码 二进制文件:数据按其在内存中的存储形式原样存放,10.1.2 文件的访问方式 1、 文件操作过程 文件操作需要包括以下几个过程: 文件指针定义 文件打开。 文件处理,执行以下两种操作中的一种; 读文件 写文件 文件关闭。,10.1.2 文件的访问方式 2、文件结构体FILE 缓冲文件系统为每个正使用的文件在内存开辟文件信息区 文件信息用系统定义的名为FILE的结构体描述 FILE定义在stdio.h中,typedef struct short level; /缓冲区满或空的程度 unsigned flags; /文件状态标志 char fd; /文件描述符 short bsize; /缓冲区大小 unsigned char *curp; /指针,当前的指向 unsigned char *buff; /数据缓冲区位置 unsigned istemp; /临时文件,指示器 short token; /用于有效性检查 FILE;,文件类型指针 指针变量说明: FILE *fp; 用法: 文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件 文件关闭后,它的文件结构体被释放,10.2 格式化数据文件操作 C文件操作用库函数实现,包含在stdio.h 文件使用方式:打开文件文件读/写关闭文件 系统自动打开和关闭三个标准文件: 标准输入-键盘 stdin 标准输出-显示器 stdout 标准出错输出-显示器 stderr 打开文件fopen 函数原型: FILE *fopen(char *name,char *mode),功能:按指定方式打开文件 返值:正常打开,为指向文件结构体的指针;打开失败,为NULL,要打开的文件名,使用文件方式,例 文件打开与测试 FILE *fp; fp=fopen(“aa.c“, “w“); if(fp=NULL) printf(“File open error!n“); exit(0); ,例 FILE *fp; fp= fopen (“c:zhoutest.dat”,”r”);,例 FILE *fp; char *filename=“c:zhoutest.dat“ fp= fopen(filename, “r“);,文件关闭fclose 作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针 函数原型:int fclose(FILE *fp),功能:关闭fp指向的文件 返值:正常关闭为0;出错时,非0,文件打开时返回的文件类型指针,格式化I/O:fprintf与fscanf 函数原型:,fprintf(文件指针,格式字符串,输出表列) fscanf(文件指针,格式字符串,输出表列),功能:按格式对文件进行I/O操作 返值:成功,返回I/O的个数;出错或文件尾,返回EOF,例 fprintf(fp,“%d,%6.2f”,i,t); /将i和t按%d,%6.2f格式输出到 fp文件 fscanf(fp,“%d,%f”, /若文件中有3,4.5 ,则将3送入i, 4.5送入t,-文件建立,【例10.1】键盘输入5位同学的3门课成绩,保存数据文件cj.dat中。 # include“ stdio.h “ main() FILE*fp; /*定义文件指针*/ float sc1,sc2,sc3; int i; if(fp=fopen(“cj.dat “,“ w “)NULL) printf(“ nCan not open file cj.dat.n “); exit(1); for(i=0;i5;i+) printf(“ please input No.%d there scores: “,i+1); scanf(“ %d,%d,%d“, ,-文件访问,【例102】显示【例10。1】所产生的数据文件cj.dat的内容,并计算各门课程的平均分。 include “ stdio.h“ main() FILEfp; /*定义文件指针*/ float sc1,sc2,sc3,sum1=0,sum2=0,sum3=0; int i; if(fp=fopen(“cj.dat “,“ r “ )=NULL) printf(“ nCan not open file cj.dat.n “); exit(1); for(i=0;i5;i+) fscanf(fp, “ %d,%d,%d “, ,-文件修改,【例103】追加一条记录到【例10.1】建立的数据文件cj.dat中。 include“ stdio.h “ main() FILE *fp; float sc1,sc2,sc3; if(fp=fopen(“ cj.dat “,“ a “)NULL) printf(“ nCan not open file cj.dat.n “); exit(1); printf(“ Please input third students three scores: “); scanf(“ %d,%d,%d “ , ,文件修改,# include “ stdio.h “ main() FILE*rfp,*wfp; /*定义文件指针*/ float sc1,sc2,sc3; int i; rfp=fopen(“ cj.dat “,“ r“); wfp=fopen(“ cj1.dat “,“ w “); for(i=0;i3;i+) fscanf(wfp, “ %d,%d,%d “,【例104】在【例10.1】中建立的数据文件中第三个同学的成绩后面插入一条记录。,for(i=0;i2;i+) fscanf(rfp, “ %d,%d,%d “, ,-字符串I/O:fputs与fgets -fgets 常用的调用形式: FILE *fp; fgets( str, n, fp ); str:字符指针,可以是字符数组名或字符指针变量; n:读取字符个数(n-1)。 fp:文件指针变量。 函数功能: 从fp所指向的文件中,读取n-1个字符后,加上字符串结 束标志0组成一个字符串,存入字符数组中。 若输入操作成功,返回字符数组的首地址; 若文件结束或输入操作失败,则返回NULL。,10.3 字符数据文件操作,【例10.5】 顺序显示磁盘的一个ASCII码文件,显示的文件名命令行上输入,就像DOS下的TYPE命令一样。 # include“ stdio.h “ void main(int argc,char *argv ) FILE *fp; char ch; if(argc!=2) printf(“ n the number of arguments not correct. “); printf(“ n usage:disp sourcefile “); exit (0); if(fp=fopen(argv1, “ r “)=NULL) printf(“ n can not open source file.n “); exit(1); while(ch=fget(fp)!=EOF) /*顺序;输出文件的内容*/ putchar(ch); /*顺序读入并显示*/ fclose(fp); / *关闭打开的文件*/ ,-字符串I/O:fputs与fgets -fputs 常用的调用形式: FILE *fp; fputs( str, fp ); str:需要输出的字符串,可以是字符串常量或字 符串指针; fp:文件指针变量。 函数功能: 将字符串(不包括字符串结束标志0)写到文件指针 fp所指向的文件中。 若输出操作成功,返回非0值; 若输出操作失败,则返回0。,10.3 字符数据文件操作,【例106】将键盘上输入一个字符串( 以“”作为结束字符),以ASCII码形式存储到一个磁盘文件中。此程序作用类似于DOS下的copy cofilename命令。,# include”stdio.h” void main(int arge,char*argv) FILE *P; char ch; if ( ( fp=fopen ( argv1 , “ w “) )= =NULL) /*打开文件失败*/ printf(“ nCan not open thei file. “); exit(1); for(; ( char=getchar( ) ) !=;) /*输入字符,并存储到指定文件中*/ fputc(ch,fp); /*输入字符并存储到文件中*/ fclose(fp); /*关闭文件*/ ,【例10.7】从键盘输入一个字符串,保存到文本文件“text.txt”中,再将此文件内容显示出来。,# include “ stdio.h “ void main(void) FILE *fp; char str81; printf(“nPlease input a string (string length81 ):“); gets(str); fopen(“text.txt“,“w“); fclose(fp); fp=fopen(“text.txt“,“r“); fgets(str,81,fp); printf(“nThe strng in file is:“); puts(str); fclose(fp); ,-feof()函数文件结束测试函数,常用的调用形式: FILE *fp; feof(fp); fp:文件指针变量。 函数功能: 测试fp所指向的文件是否已读到文件尾部。 若该文件没有结束,则返回0; 若文件结束,则返回非0值。,【例10.5】中的代码: while(ch=fgetc(fp)!=EOF) putchar(ch); 可以更改为: while(!feof(fp) ) ch=fgetc( fp ); putchar(ch); ,10.4 fread( )与fwrite( )函数 函数原型:,fread(buffer, size, count, fp) fwrite(buffer, size, count, fp),功能:读/写数据块 返值:成功,返回读/写的块数;出错或文件尾,返回0 说明: buffer: 指向要输入/输出数据块的首地址的指针 size: 每个要读/写的数据块的大小(字节数) count: 要读/写的数据块的个数 fp: 要读/写的文件指针 fread与fwrite 一般用于二进制文件的输入/输出,【例10.8】从键盘上按顺序输入4个学生的数据,包括学号、 姓名、成绩。要求完成: (1)将4个学生的数据写入二进制文件“mydat.dat”中; (2)显示文件“mydat.dat”中的数据。,# include“ stdio.h “ struct stud long xh; char name10; float score; ; main( ) struct stud stu1; int i; FILE *fp; fp=fopen(“ mydat.dat “,“ web “); for (i=1;i=4;i+) ,printf(“ nPlease input No,%d student info: “,i); scanf(“ %ld,%s,%f “, ,10.5 文件的定位和错误处理 几个概念 文件位置指针-指向当前读写位置的指针 读写方式 顺序读写:位置指针按字节位置顺序移动,叫 随机读写:位置指针按需要移动到任意位置,叫 rewind函数 函数原型: void rewind(FILE *fp) 功能:重置文件位置指针到文件开头 返值:无,【例10.9】有一个文本文件,开始时显示它的全部内容,第二次只显示第一行 的内容。 # include “ stdio.h “ main( ) FILE *fp; char string81; /*定义一个字符数组,用于存放第一行内容*/ if(fp=fopen (“ test.c “,“ r “)= =NULL) printf(“ n文件打开失败! “); exit(0); while (! feof(fp) putchar(fgetc(fp); rewind (fp); /*显示完内容后,文件读写位置指针在文件尾,此函数是使它 回到文件开头位置*/ puts(fgets(string ,81,fp); fclose(fp); ,fseek函数 函数原型: fseek(文件类型指针,位移量,起始点) 功能:改变文件位置指针的位置 返值:成功,返回0;失败,返回非0值,文件指针,位移量(以起始点为基点,移动的字节数) 0 向后移动 0 向前移动,起始点 文件开始 SEEK_SET 0 文件当前位置 SEEK_CUR 1 文件末尾 SEEK_END 2,例 fseek(fp,100L,0); /将位置指针移到离文件头100个字节处 fseek(fp,50L,1); /将位置指针移到离当前位置50个字节处 fseek(fp,-10L,2); /将位置指针从文件末尾处向后退10个字节,ftell函数 函数原型: ftell(文件类型指针) 功能:返回fp指向的文件中的读写指针当前位置,即相对于 文件开始处的位移量,单位是字节。 若调用成功,则返回文件读写指针当前值(长整型); 若调用失败,则返回-1L。,【例 10.10】由键盘输入一些数据(遇到星号时结束),并以二进制形式保护存 到磁盘文件mybin.dat 中。再从此文件中随机读出数据并显示。 # include “ stido.h “ main() FILE*fp; char ch; long curpos; if (fp=fopen(“mybin.dat”,”wb”)=NULL) printf (“n 不能建立新文件!”); exit (1); while (ch=getchar ()!= * ) putc (ch,fp); fclose (fp); if (fp=fopen(“ mybin.dat “,“ rb “)=NULL) printf (“n 不能打开文件!“); exit (1); fseek(fp,01,SEEK_END); printf(“ n 文件大小为:%ld 字节。“,ftell(fp); rewind(fp);,printf(fp); printf(“ n目前的文件读写位置指针 指向第%ld字节。n “,ftelll(fp); while(ch=getc(fp),!feof(fp) putc(ch,stdout); curpos=4l; fseek(fp,curpos,SEEK-SET); printf(“ n目前的文件读写指针位置是: %ld “
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。