![C语言第7章-文件及应用_第1页](http://file4.renrendoc.com/view/dd4b19e4f3f5fcd1bbc80e48248fbe0b/dd4b19e4f3f5fcd1bbc80e48248fbe0b1.gif)
![C语言第7章-文件及应用_第2页](http://file4.renrendoc.com/view/dd4b19e4f3f5fcd1bbc80e48248fbe0b/dd4b19e4f3f5fcd1bbc80e48248fbe0b2.gif)
![C语言第7章-文件及应用_第3页](http://file4.renrendoc.com/view/dd4b19e4f3f5fcd1bbc80e48248fbe0b/dd4b19e4f3f5fcd1bbc80e48248fbe0b3.gif)
![C语言第7章-文件及应用_第4页](http://file4.renrendoc.com/view/dd4b19e4f3f5fcd1bbc80e48248fbe0b/dd4b19e4f3f5fcd1bbc80e48248fbe0b4.gif)
![C语言第7章-文件及应用_第5页](http://file4.renrendoc.com/view/dd4b19e4f3f5fcd1bbc80e48248fbe0b/dd4b19e4f3f5fcd1bbc80e48248fbe0b5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章
文件及应用
兰州理工大学整理ppt第七章文件及应用7.1C语言文件的概念7.2文件操作7.3非缓冲文件系统整理ppt7.1
C语言文件的概念整理ppt文件是一组存储在外部设备上的数据的集合。每个文件都有一个文件名,操作系统以树状的目录(或称文件夹)管理文件。使用文件可以:大量、永久地保存信息;便于数据共享;整理ppt文件的分类:按文件的逻辑结构:记录文件:由定长或不定长的记录组成;流式文件:由一个个字符(字节)数据顺序组成按存储介质:普通文件(磁盘文件):存储介质文件(磁盘、磁带、光盘等);设备文件:非存储介质(键盘、显示器、打印机等)。按数据的组织形式:文本(ASCII码)文件:每个字节存放一个字符的ASCII码;二进制文件:数据按其在内存中的存储形式原样存放。整理pptUNIXC标准定义了两套I/O操作方法:缓冲文件系统(bufferedfilesystem),也可称为格式化的(formatted)或高级(highlevel)文件系统;非缓冲(unbuffered)文件系统,也可称非格式化的(unformatted)文件系统,只存在于UNIX标准中。ANSIC标准仅定义了缓冲文件系统。本章集中讨论ANSIC文件系统。7.1.1ANSIC的I/O和UNIXC的I/ODisk内存Buffer整理pptC语言为实现设备无关性(各种不同的设备和磁盘文件等同),提供了称为流的抽象。流是由数据字节序列组成的。每一个C流与一个文件相连。流的模式共有两类:文本流(text);二进制(binary)(比特)流。通常把显示器定义为标准输出文件,使用printf,putchar函数对其输出。键盘通常被指定标准的输入文件,使用scanf,getchar函数输入。7.1.2流和文件整理ppt文件还可以分为:随机存取文件,如磁盘文件;顺序存取文件,如键盘。支持随机存取的文件,打开文件时也初始化文件位置指示(FilePositionIndicator),将其置为文件开始处,随着对文件的读写再对其增量或减量,确保访问的正确推进。7.1.3C语言文件整理ppt与文件相联的每个流都有一个FILE类型的控制结构,通常称为文件指针。在stdio.h中定义,用户绝对不能修改。7.1.3C语言文件typedefstruct{intlevel;/*缓冲区“满”或“空”的程度*/unsignedflags;/*文件状态标志*/charfd;/*文件描述符*/unsignedcharhold;/*如无缓冲区不读取字符*/intbsize;/*缓冲区大小*/unsignedchar*buffer;/*数据缓冲区位置*/unsignedchar*curp;/*文件定位指针*/unsignedistemp;/*临时文件指示器*/shorttoken;/*用于有效性检查*/}FILE;整理ppt7.2
文件操作整理ppt文件的操作包括了几个基本步骤:1)定义文件结构体类型指针;2)打开文件;3)文件的读/写(追加)操作;4)关闭文件。整理ppt声明一个文件结构体类型指针的形式是:FILE*文件结构体指针名;例如:FILE*fp1,*fp2;声明了两个指向文件的文件指针变量。7.2.1定义文件结构体类型的指针整理ppt文件的一般处理过程7.2.2用于文件操作的函数整理ppt7.2.2用于文件操作的函数UNIXI/O函数(非缓冲文件系统)大多没有前缀f。
用于文件操作的函数原型声明在stdio.h中。系统定义宏EOF为整数-1,当读到文件尾时的返回该值。整理ppt1.文件的打开与关闭函数1)打开文件FILE*fopen(char*filename,char*mode);例:FILE*fp=fopen("test","rw");filename是包含的路径文件名mode是打开方式,见表:返回值为指向此文件的指针,以后使用。如果打开失败,返回值为NULL。7.2.2用于文件操作的函数整理ppt1.文件的打开与关闭函数2)关闭文件函数fclose()关闭由fopen()函数打开的流。fclose()函数把遗留在缓冲区的数据写入文件,实施操作系统级的关闭操作。同时释放与流联系的文件控制块。7.2.2用于文件操作的函数整理ppt2.文件的读写函数1)字符读写函数:intfputc(intch,FILE*fp);intfgetc(FILE*fp);2)串读写函数intfputs(constchar*str,FILE*fp);char*fgets(char*str,intlength,FILE*fp);7.2.2用于文件操作的函数整理ppt【例7.6】统计文本文件中的字符个数。7.2.2用于文件操作的函数/*功能:统计一个文本文件中字符的个数*//*说明:文件名从命令行输入*/#include"stdio.h"main(intargc,char*argv[]){FILE*fp;intcount=0;if((fp=fopen(argv[1],"r"))==NULL){printf("can'topenfile%s.",argv[1]);exit(1);//文件打开失败,退出
}//文件成功打开,从文件中读取字符
while(fgetc(fp)!=EOF)//按字符读文件并对读入字符数进行
count++;//统计,直到遇到文件结束符为止
fclose(fp);printf("file\"%s\"contains%dcharacters.\n",argv[1],count);}整理ppt【例7.8】将键盘输入的串写入文件test中。7.2.2用于文件操作的函数/*功能:建立一个文本文件*//*说明:使用函数gets()*/#include"stdio.h"#include"string.h"voidmain(void){charstr[80];FILE*fp;if((fp=fopen("c:\\test","w"))==NULL){printf("不能打开文件!\n");exit(1);}do{printf("输入一个字串(空回车结束):\n");gets(str);strcat(str,"\n");/*加上一个新行符'\n'*/fputs(str,fp);/*写出到文件中*/}while(*str!='\n');/*当输入空串时结束*/}整理ppt2.文件的读写函数3)格式读写函数fprintf()和fscanf()intfprintf(FILE*fp,constchar*format,……);char*fscanf(FILE*fp,constchar*format,……);4)块读写函数fwrite()和fread()intfwrite(void*buf,size_tsize,size_tcount,FILE*fp);intfread(void*buf,size_tsize,size_tcount,FILE*fp);7.2.2用于文件操作的函数整理ppt【例7.11】建立一个学生通讯录的数据库文件。7.2.2用于文件操作的函数/*功能:建立一个学生通讯录的数据库文件*//*说明:使用格式输出函数fprintf()*/#include"stdio.h"main(){FILE*fp;charch;structmail{charname[9];charsex[3];charbirth[12];charlocal[5];charphone[8];charpostcode[7];charaddr[20];}st;if((fp=fopen("mail","w"))==NULL){printf("fileopenfailed!!!\n");exit(0);}fprintf(fp,"%10.8s%6.4s%12.10s%6.4s%9.7s%8.6s%13.10s\n",“姓名”,“性别","出生日期","区号","电话","邮政编码","通讯地址");fprintf(fp,"\n");while(1){printf("姓名:");scanf("%s",);printf("性别(男or女):");scanf("%s",st.sex);printf("出生日期(yyyy-mm-dd):");scanf("%s",st.birth);printf("区号xxxx:");scanf("%s",st.local);printf("电话xxxxxxx:");scanf("%s",st.phone);printf("邮政编码:");scanf("%s",st.postcode);printf("通讯地址:");scanf("%s",st.addr);/*按特定的格式写出数据到文件*/
fprintf(fp,"%10.8s%6.4s%12.10s%6.4s%9.7s%8.6s%s\n",,st.sex,st.birth,st.local,st.phone,st.postcode,st.addr);printf("StrikeEoretoendenter?\n");ch=getch();if(ch=='e'||ch=='E')break;};fclose(fp);}整理ppt【例7.15】如例7.11,用块写函数来建立学生通讯录。7.2.2用于文件操作的函数/*功能:建立一个学生通讯录的数据库文件*//*说明:使用块写入函数fwrite()*/#include"stdio.h"main(){FILE*fp;charch;structmail{charname[9];charsex[3];charbirth[12];charlocal[5];charphone[8];charpostcode[9];charaddr[20];}st;if((fp=fopen("mail","wb"))==NULL){printf("fileopenfailed!!!\n");exit(0);}while(1){printf("姓名:");scanf("%s",);printf("性别(男or女):");scanf("%s",st.sex);printf("出生日期(yyyy-mm-dd):");scanf("%s",st.birth);printf("区号xxxx:");scanf("%s",st.local);printf("电话xxxxxxx:");scanf("%s",st.phone);printf("邮政编码:");scanf("%s",st.postcode);printf("通讯地址:");scanf("%s",st.addr);/*按特定的格式写出数据到文件*/
if(fwrite(&st,sizeof(structmail),1,fp)!=1)printf("Writeerror!");
printf("StrikeEoretoendenter?\n");ch=getch();if(ch=='e'||ch=='E')break;};fclose(fp);}整理ppt【例7.17】用块读函数来读出并显示学生通讯录。7.2.2用于文件操作的函数/*功能:读出并显示学生通讯录的数据库文件*//*说明:使用块输出函数fread()*/#include"stdio.h"main(){FILE*fp;charch;structmail{charname[9];charsex[3];charbirth[12];charlocal[5];charphone[8];charpostcode[9];charaddr[20];}st;if((fp=fopen("mail","rb"))==NULL){printf("fileopenfailed!!!\n");exit(0);}while(!feof(fp)){if(fread(&st,sizeof(structmail),1,fp)!=1)break;printf("%10.8s%4.2s%12.10s%6.4s%9.7s%8.6s%13.10s\n","name","sex","birthday","local","phone","postcode","address");printf("\n");printf("%10.8s%4.2s%12.10s%6.4s%9.7s%8.6s%s\n",,st.sex,st.birth,st.local,st.phone,st.postcode,st.addr);}fclose(fp);}整理ppt3.文件的定位此前的文件操作均是顺序读写操作。通过改变文件位置指针,可在文件的任意位置进行读写操作,即随机读写操作。文件位置指针总指向当前读写位置,每读取一个数据,就自动向下移动(该数据的长度)。文件定位函数改变文件位置指针的位置:voidrewind(FILE*stream);intfseek(FILE**stream,longoffset,intorigin);longftell(FILE*stream);
7.2.2用于文件操作的函数文件位置指针返回到文件头移动文件位置指针:Offset(偏移量);Origin(基准):SEEK_SET(0)─从文件的开头;SEEK_CUR(1)─从文件当前位置;SEEK_END(2)─从文件的末尾。取文件位置指针:返回当前位置值(字节数)。出错时返回-1。整理ppt4.文件的检测函数1)intfeof(FILE*stream);函数feof()检查文件位置指示,到达文件尾时返回非零值,否则返回零值。到达文件尾后,一切后续读操作均返回EOF,直到调用rewind()或用fseek()改变位置指示。操作二进制(binary)文件时,必须直接调用feof(),由此确定是否到达二进制文件的结尾。2)intferror(FILE*stream);检查文件错误。返回值0表示无错,非零表示有错。与stream关联的错误标志保持置位,直到关闭文件或调用rewind()/clearerr()为止。7.2.2用于文件操作的函数整理ppt【例7.17】用块读函数来读出并显示学生通讯录。7.2.2用于文件操作的函数/*功能:读出并显示学生通讯录的数据库文件*//*说明:使用格式输出函数fprintf()*/#include"stdio.h"main(){FILE*fp;charch;structmail{charname[9];charsex[3];charbirth[12];charlocal[5];charphone[8];charpostcode[9];charaddr[20];}st;if((fp=fopen("mail","rb"))==NULL){printf("fileopenfailed!!!\n");exit(0);}while(!feof(fp)){if(fread(&st,sizeof(structmail),1,fp)!=1)break;
printf("%10.8s%4.2s%12.10s%6.4s%9.7s%8.6s%13.10s\n","name","sex","birthday","loca
温馨提示
- 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年养殖场租赁协议正式版本
- 2025年云服务器租用合同示范
- 安全生产技术规范 第25部分:城镇天然气经营企业DB50-T 867.25-2021
- 现代企业管理 (全套完整课件)
- 走进本土项目化设计-读《PBL项目化学习设计》有感
- 《网店运营与管理》整本书电子教案全套教学教案
- 教师信息技术能力提升培训课件希沃的课件
- 高端公寓住宅项目营销策划方案(项目定位 发展建议)
- 执业兽医师聘用协议(合同)书
- 第1本书出体旅程journeys out of the body精教版2003版
- [英语考试]同等学力英语新大纲全部词汇
- 2022年肝动脉化疗栓塞术(TACE)
- 形式发票格式2 INVOICE
评论
0/150
提交评论