




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
乔林,计算机程序设计基础,Email:qiaolinTel:62780973,清华大学计算机科学与技术系,第十章文件与数据存储,学习目标掌握文件的基本概念学会使用常用的文件操作函数进行文件读写会使用文件存储、访问和管理数据,10.1文件的基本概念,数据的保存与持久化在程序结束时数据仍有效文件的定义一组相关信息的集合存储于某种存储介质上具有某种特定格式,其中的信息也具有相同的含义,需要用不同的方法存取文件结构体与文件指针,文件的类型,顺序文件与随机文件顺序文件:只能顺序访问其中的信息例:存储在磁带上的文件只能顺序访问随机文件:可以随机访问文件的任一部分信息,可以指定读写位置二进制文件与文本文件文本文件:信息以字符形式存储,有分行信息,阅读目标为程序员与程序二进制文件:文件以二进制码存储,无分行信息,阅读目标为程序,10.2基本文件操作,文件打开与关闭操作FILE*fopen(constchar*filename,constchar*mode);intfclose(FILE*fp);文件状态与缓冲区操作intfeof(FILE*fp);intfflush(FILE*fp);文件指针操作voidrewind(FILE*fp);intfseek(FILE*fp,longoffset,intfromwhere);longftell(FILE*fp);,10.2基本文件操作,文件读写操作intfprintf(FILE*fp,constchar*fmt,);intfscanf(FILE*fp,constchar*fmt,);intfgetc(FILE*fp);char*fgets(char*str,intn,FILE*fp);intfputc(intch,FILE*fp);charfputs(char*str,FILE*fp);intfread(void*buf,intsize,intcount,FILE*fp);intfwrite(void*buf,intsize,intcount,FILE*fp);,文件打开操作,函数原型FILE*fopen(constchar*filename,constchar*mode);返回值调用成功返回文件指针,失败返回NULL函数参数filename:文件名字符串,可以包含路径名mode:文件打开模式,文件打开模式,mode:文件打开模式r:读,若文件不存在,返回NULLw:写,若文件不存在,创建,若已存在,删除a:追加,若文件不存在,创建,若已存在,添加到文件尾部r+、w+:读写,若文件不存在,创建,若已存在,覆盖a+:读与追加,若文件不存在创建,若已存在,覆盖b:二进制格式示例“rb”:读模式打开二进制文件“w+”:读写模式打开文本文件,文件打开示例,文件打开应用,#include#includeintmain()FILE*fp;charfilename40,mode4;while(1)/*输入文件名和打开方式*/printf(“nEnterafilename:“);gets(filename);/*输入文件名*/printf(“nEnteramode(max3characters):“);gets(mode);/*输入打开方式*/,文件打开示例,/*打开文件*/if(fp=fopen(filename,mode)!=NULL)printf(“nSuccessfulopening%sinmode%s.n“,filename,mode);/*输出成功信息*/fclose(fp);/*关闭文件*/elsefprintf(stderr,“nErroropeningfile%sinmode%s.n“,filename,mode);/*输出不成功信息*/*询问是否结束*/puts(“Enterxtoexit,anyothertocontinue.“);if(getc(stdin)=x)break;elsecontinue;,预定义的标准文件,标准文件:输入输出流stdin:标准输入设备,一般为键盘stdout:标准输出设备,一般为屏幕stderr:标准错误输出设备,一般为屏幕,文件关闭操作,函数原型关闭单个文件:intfclose(FILE*fp);关闭除标准文件之外的所有文件:intfcloseall();文件缓冲区外部块设备与内部数据流间的接口(中转站)清理文件缓冲区:intfflush(FILE*fp);清理所有文件的缓冲区:intfflushall();,文件关闭示例,将磁盘文件中的信息复制到新文件中,#includevoidmain()FILE*in,*out;charinname12,outname12;scanf(“%s”,inname);scanf(“%s”,outname);if(in=fopen(inname,“r”)=NULL)exit(0);if(out=fopen(outname,“w”)=NULL)exit(0);while(!feof(in)fputc(fgetc(in),out);fclose(in);fclose(out);,文件格式化输入输出操作,函数原型格式化输出:intfprintf(FILE*fp,constchar*fmt,);格式化输入:intfscanf(FILE*fp,constchar*fmt,);说明与标准格式化输入输出函数功能基本相同差别:多了文件指针参数,输入源或输出目的均是文件,而不是标准设备思考:fprintf(stdout,);=printf();?,文件格式化输出示例,将用户输入的5个浮点数写入文件,#include#includevoidclear_kb();intmain()FILE*fp;floatdata5;intcount;charfilename20;puts(“Enter5floating-pointnumericalvalues.“);for(count=0;count5;count+)scanf(“%f“,/*清除键盘缓冲区*/,文件格式化输出示例,puts(“Enteranameforthefile.“);gets(filename);if(fp=fopen(filename,“w“)=NULL)fprintf(stderr,“Erroropeningfile%s.“,filename);exit(1);/*将数据写入文件和标准输出设备stdout*/for(count=0;count5;count+)fprintf(fp,“ndata%d=%f“,count,datacount);fprintf(stdout,“ndata%d=%f“,count,datacount);fclose(fp);printf(“n“);return0;/*清空键盘缓冲区*/voidclear_kb()charjunk80;gets(junk);,文件格式化输入示例,从文件中读取5个浮点数,#include#includeintmain()floatf1,f2,f3,f4,f5;FILE*fp;if(fp=fopen(“INPUT.TXT“,“r“)=NULL)fprintf(stderr,“Erroropeningfile.n“);exit(1);fscanf(fp,“%f%f%f%f%f“,文件字符输入输出操作,函数原型字符输入:intfgetc(FILE*fp);字符串输入:char*fgets(char*str,intn,FILE*fp);字符输出:intfputc(intch,FILE*fp);字符串输出:charfputs(char*str,FILE*fp);说明与标准字符输入输出函数功能相同差别:多了文件指针参数,源或目的均为文件,文件直接输入输出操作,函数原型直接输入:intfread(void*buf,intsize,intcount,FILE*fp);直接输出:intfwrite(void*buf,intsize,intcount,FILE*fp);说明直接输入输出按块操作fread():从文件fp中将count块大小为size的连续数据读入缓冲区buffwrite():将缓冲区buf中count块大小为size的连续数据写入文件fp,文件直接输入输出示例,使用fread()与fwrite()进行直接文件访问,#include#include#defineSIZE20intmain()intcount,array1SIZE,array2SIZE;FILE*fp;/*数组初始化*/for(count=0;count0;i)/依次建立并向表头插入结点/创建新结点p=(ChildNode*)malloc(sizeof(ChildNode);inputChild(p);/输入数据到新结点/将新结点插入到表头结点之后pnext=childnext;childnext=p;returnchild;,10.3文件应用示例,ChildNode*createSortedList(intn)/生成有序链表ChildNode*p,*q,*child;inti;child=(ChildNode*)malloc(sizeof(ChildNode);/头结点childnext=NULL;/初始化指针域for(i=n;i0;i)/依次建立并向表头插入结点p=(ChildNode*)malloc(sizeof(ChildNode);/创建结点inputChild(p);/输入数据到新结点q=child;/查找新结点的插入位置while(qnext!=NULL,10.3文件应用示例,voidprintList(ChildNode*child)/遍历并输出链表ChildNode*current;current=child;/遍历指针初始状态指向表头while(currentnext!=NULL)current=currentnext;/当前指针移动到下一个结点/输出当前结点数据printf(“Age%dt“,currentage);printf(“Gender%ct“,currentgender);printf(“Height%ft“,currentheight);printf(“Weight%fn“,currentweight);,10.3文件应用示例,voidsaveList(FILE*fp,ChildNode*child)ChildNode*current,*pre;/遍历指针初始状态指向表头之后的数据结点current=childnext;while(current!=NULL)pre=current;current=currentnext;/当前指针移动到下一个结点prenext=NULL;/结点指针域置空/存储当前结点数据fwrite(pre,sizeof(ChildNode),1,fp);free(pre);,10.3文件应用示例,ChildNode*getList(FILE*fp)ChildNode*p,*child;child=(ChildNode*)malloc(sizeof(ChildNode);childnext=NULL;p=(ChildNode*)malloc(sizeof(ChildNode);fread(p,sizeof(ChildNode),1,fp);/读入数据到新结点while(!feof(fp)/依次建立并向表头插入结点/将新结点插入到表头结点之后pnext=childnext;childnext=p;p=(ChildNode*)malloc(sizeof(ChildNode);fread(p,sizeof(ChildNode),1,fp);returnchild;,10.3文件应用示例,/主文件#include#include#include“childrenlist.h“intmain()ChildNode*childList=NULL,*childList2=NULL;intn;floatf=1.0;FILE*fp;printf(“Numberofchildren:“);scanf(“%d“,10.3文件应用示例,childList=createSortedList(n);/建立有序链表if(fp=fopen(“childlist.dat“,“wb“)=NULL)fprintf(stderr,“Erroropeningfile.“);exit(1);saveList(fp,childList);/将链表存入文件fclose(fp);if(fp=fopen(“childlist.dat“,“rb“)=NULL)fprintf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医生初级面试必-备知识点与预测题详解
- 2025年村级环保人才招聘笔试模拟题及答案详解
- 公务员上岸面试题及答案
- 公务员面试题及答案合集
- 公务员遴选及答案面试题
- 2025年公墓设计师招聘笔试宝典全真模拟试题及答案
- 2025年医学影像诊断技术专业考试模拟试题及答案
- 校长科研知识培训课件
- 2025年海关聘用制工作人员招聘考试模拟试题及答案
- 2025年高职院校工会干事招聘面试指南及模拟题解析
- 2025年事业单位会计岗考试题库
- 医院投诉处理标准化培训
- 2025年广东法官入额考试题库
- 肺康复专题讲座
- 2025年医师定期考核业务水平测评理论考试(公共卫生)历年参考题库含答案详解(5套)
- 2025年秋季开学教师大会上教学副校长讲话:回到课堂的原点走向教学的深处
- 2025事业单位招聘考试时事政治考试题库及答案(考点梳理)
- 2025年发展对象培训考试试题(含答案)
- 亚马逊运营每周工作汇报
- 2025年少先队知识竞赛试题库附答案
- 2025年郑州人才公司面试题及答案
评论
0/150
提交评论