版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1C语言第十三章如int型数100000010011100010000内存存储形式0010011100010000二进制形式0011000100110000001100000011000000110000ASCII形式文本文件特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果第1页/共19页文件处理方法缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:缓冲区指令区程序用户数据区磁盘非缓冲文件系统:第2页/共19页13.2文件类型指针文件结构体FILE
缓冲文件系统为每个正使用的文件在内存开辟文件信息区文件信息用系统定义的名为FILE的结构体描述FILE定义在stdio.h中typedefstruct{int_fd;//文件号
int_cleft;//缓冲区中剩下的字符数
int_mode;//文件操作方式
char*_next;//文件当前读写位置
char*_buff;//文件缓冲区位置}FILE;FILEf[5];第3页/共19页文件类型指针指针变量说明:FILE*fp;用法:文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件文件关闭后,它的文件结构体被释放文件名文件使用方式文件类型指针C程序操作系统磁盘第4页/共19页13,3文件的打开与关闭C文件操作用库函数实现,包含在stdio.h文件使用方式:打开文件-->文件读/写-->关闭文件系统自动打开和关闭三个标准文件:标准输入------键盘stdin标准输出------显示器stdout标准出错输出-----显示器stderr13.3.1打开文件fopen函数原型:FILE*fopen(文件名,使用文件方式)功能:按指定方式打开文件返值:正常打开,为指向文件结构体的指针;打开失败,为NULL要打开的文件名使用文件方式例文件打开与测试
FILE*fp;fp=fopen(“aa.c”,“w”);if(fp==NULL){printf(“Fileopenerror!\n”);
exit(0);}例FILE*fp;fp=fopen(“c:\\fengyi\\bkc\\test.dat”,”r”);
例FILE*fp;char*filename=“c:\\fengyi\\bkc\\test.dat”fp=fopen(filename,”r”);
“r+/rb+”(读写)“a/ab”(追加)“w/wb”(只写)“r/rb”(只读)“w+/wb+”(读写)“a+/ab+”(读写)为输入打开一个文本/二进制文件为输出打开或建立一个文本/二进制文件为读/写打开一个文本/二进制文件为读/写建立一个文本/二进制文件为读/写打开或建立一个文本/二进制文件向文本/二进制文件尾追加数据文件使用方式含义第5页/共19页13.3.2文件关闭fclose作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针函数原型:intfclose(FILE*fp)功能:关闭fp指向的文件返值:正常关闭为0;出错时,非0(EOF,值为-1)文件打开时返回的文件类型指针磁盘文件输出文件缓冲区输入文件缓冲区程序数据区a缓冲文件系统:fclose不关闭文件可能会丢失数据第6页/共19页13.4文件的读写13.4.1字符I/O:fputc与fgetc(putc和getc)1.fputc函数原型:intfputc(charc,FILE*fp)功能:把一字符c写入fp指向的文件中返值:正常,返回c;出错,为EOF(-1)2.fgetc函数原型:intfgetc(FILE*fp)功能:从fp指向的文件中读取一字节代码返值:正常,返回读到的代码值;读到文件尾或出错,为EOF文件I/O与终端I/O#defineputc(ch,fp)fputc(ch,fp)#definegetc(fp)fgetc(fp)#defineputchar(c)fputc(c,stdout)#definegetchar()fgetc(stdin)第7页/共19页
判断二进制文件是否结束
while(!feof(fp)){c=fgetc(fp);……..}例文件拷贝例从键盘输入字符,逐个存到磁盘文件中,直到输入‘#“为止#include<stdio.h>voidmain(){FILE*fp;charch,*filename=“out.txt”;if((fp=fopen(filename,"w"))==NULL){printf("cannotopenfile\n"); exit(0);}printf("Pleaseinputstring:");ch=getchar();while(ch!='#'){fputc(ch,fp);putchar(ch);ch=getchar();}fclose(fp);}例读文本文件内容,并显示#include<stdio.h>voidmain(){FILE*fp;charch,*filename=“out.txt”;if((fp=fopen(filename,”r"))==NULL){printf("cannotopenfile\n");exit(0);}while((ch=fgetc(fp))!=EOF)putchar(ch);fclose(fp);}判断文本文件是否结束feof函数原型:intfeof(FILE*fp)功能:判断文件是否结束返值:文件结束,返回真(非0);文件未结束,返回0#include<stdio.h>voidmain(){FILE*in,*out;charch,infile[10],outfile[10];scanf("%s",infile);scanf("%s",outfile);
if((in=fopen(infile,"r"))==NULL){printf("Cannotopeninfile.\n");
exit(0);}if((out=fopen(outfile,"w"))==NULL){printf("Cannotopenoutfile.\n");exit(0);}
while(!feof(in))fputc(fgetc(in),out);
fclose(in);
fclose(out);}第8页/共19页13.4.2数据块I/O:fread与fwrite调用形式:fread(buffer,size,count,fp)fwrite(buffer,size,count,fp)功能:读/写数据块返值:成功,返回读/写的块数;出错或文件尾,返回0说明:buffer:指向要输入/输出数据块的首地址的指针size:每个要读/写的数据块的大小(字节数)count:要读/写的数据块的个数fp:要读/写的文件指针fread与fwrite一般用于二进制文件的输入/输出第9页/共19页例floatf[2];FILE*fp;fp=fopen(“aa.dat”,“rb”);
fread(f,4,2,fp);for(i=0;i<2;i++)
fread(&f[i],4,1,fp);例structstudent{intnum;charname[20];charsex;intage;floatscore[3];}stud[10];for(i=0;i<10;i++)
fread(&stud[i],sizeof(structstudent),1,fp);第10页/共19页例从键盘输入4个学生数据,把他们转存到磁盘文件中去#include<stdio.h>#defineSIZE4structstudent_type{charname[10];intnum;intage;charaddr[15];}stud[SIZE];voidmain(){voidsave();voiddisplay();inti;for(i=0;i<SIZE;i++) scanf("%s%d%d%s",stud[i].name,&stud[i].num, &stud[i].age,stud[i].addr);
save();display();}voidsave(){FILE*fp;inti;if((fp=fopen("d:\\fengyi\\exe\\stu_dat","wb"))==NULL){printf("cannotopenfile\n"); return;}for(i=0;i<SIZE;i++)if(fwrite(&stud[i],sizeof(structstudent_type),1,fp)!=1) printf("filewriteerror\n");
fclose(fp);}voiddisplay(){FILE*fp;inti;if((fp=fopen("d:\\fengyi\\exe\\stu_dat","rb"))==NULL){printf("cannotopenfile\n"); return;}for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%-10s%4d%4d%-15s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);}
fclose(fp);}第11页/共19页13.4.3格式化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”,&i,&t);//若文件中有3,4.5,则将3送入i,4.5送入t第12页/共19页13.4.4其它函数字符串I/O:fgets与fputs函数调用:fgets(str,n,fp)fputs(str,fp)功能:从fp指向的文件读/写一个字符串返值:fgets正常时返回读取字符串的首地址;出错或文件尾,返回NULLfputs正常时返回写入的最后一个字符;出错为EOF例从键盘读入字符串存入文件,再从文件读回显示fgets从fp所指文件读n-1个字符送入s指向的内存区,并在最后加一个‘\0’(若读入n-1个字符前遇换行符或文件尾(EOF)即结束)fputs把s指向的字符串写入fp指向的文件#include<stdio.h>main(){FILE*fp;charstring[81];if((fp=fopen("file.txt","w"))==NULL){printf("cann'topenfile");exit(0);}while(strlen(gets(string))>0){fputs(string,fp);
fputs("\n",fp);}
fclose(fp);if((fp=fopen("file.txt","r"))==NULL){printf("cann'topenfile");exit(0);}while(fgets(string,81,fp)!=NULL)
fputs(string,stdout);fclose(fp);}第13页/共19页13.5文件的定位几个概念文件位置指针-----指向当前读写位置的指针读写方式顺序读写:位置指针按字节位置顺序移动,叫~随机读写:位置指针按需要移动到任意位置,叫~13.5.1rewind函数函数原型:voidrewind(FILE*fp)功能:重置文件位置指针到文件开头返值:无例对一个磁盘文件进行显示和复制两次操作#include<stdio.h>voidmain(){FILE*fp1,*fp2;fp1=fopen("d:\\fengyi\\bkc\\ch12_4.c","r");fp2=fopen("d:\\fengyi\\bkc\\ch12_41.c","w");while(!feof(fp1))putchar(getc(fp1));
rewind(fp1);while(!feof(fp1))putc(getc(fp1),fp2);
fclose(fp1);fclose(fp2);}第14页/共19页13.5.2fseek函数函数调用:fseek(文件类型指针,位移量,起始点)功能:改变文件位置指针的位置返值:成功,返回0;失败,返回非0值文件指针位移量(以起始点为基点,移动的字节数)>0
向后移动<0
向前移动起始点文件开始
SEEK_SET0文件当前位置
SEEK_CUR1文件末尾
SEEK_END2例fseek(fp,100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);13.5.3ftell函数函数原型:longftell(FILE*fp)功能:返回位置指针当前位置(用相对文件开头的位移量表示)返值:成功,返回当前位置指针位置;失败,返回-1L,例磁盘文件上有3个学生数据,要求读入1、3学生数据并显示#incldue<stdio.h>#include<stdlib.h>voidmain(){inti;FILE*fp;if((fp=fopen("studat","rb"))==NULL){printf("can'topenfile\n");exit(0);}for(i=0;i<3;i+=2){fseek(fp,i*sizeof(structstudent_type),0);
fread(&stud[i],sizeof(structstudent_type),1,fp);printf("%s%d%d%s\n",stud[i].name,stud[i].num,stud[i].age,stud[i].addr);}fclose(fp);}#include<stdio.h>structstudent_type{intnum;charname[10];intage;charaddr[15];}stud[3];#include<stdio.h>voidmain(){FILE*fp;charfilename[80];longlength;
gets(filename);
fp=fopen(filename,"rb");if(fp==NULL)print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职食品生物技术(食品生物技术应用)试题及答案
- 2025年大学统计学(统计学)试题及答案
- 2025年大学二年级(劳动经济学)劳动关系综合测试题及答案
- 2025年中职计算机信息管理(信息管理应用)试题及答案
- 2026年智能灯光控制面板项目投资计划书
- 2025年大学大三(人力资源管理)员工培训效果转化综合测试试题及答案
- 2026年品牌管理(品牌拓展策略)试题及答案
- 2025年中职应急救援技术(火灾救援)试题及答案
- 2025年高职第一学年(新能源汽车检测与维修)充电桩运维阶段测试题及答案
- 2026年超声医学(超声检查操作)试题及答案
- 2026秋招:澳森特钢集团试题及答案
- 哲学史重要名词解析大全
- ktv股东合作协议书
- 2023年北京海淀区高三一模化学试题及答案
- 肿瘤内科静脉给予抗肿瘤药物评价标准
- 医疗器械生产质量管理规范无菌医疗器械实施细则和检查评定标准
- 吊篮租赁安拆分包合同
- GB/T 20728-2006封闭管道中流体流量的测量科里奥利流量计的选型、安装和使用指南
- FZ/T 54033-2010锦纶6高取向丝(HOY)
- 六年级英语上册-Unit-5-What-does-he-do单元整体分析-人教PEP
- 品管圈在降低PICC导管留置期间并发症中的应用
评论
0/150
提交评论