版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章文件C文件概述文件类型指针文件的打开与关闭文件的读写文件的定位编程训练Introduction:WhatisI/O?CentralProcessingUnitMainMemoryMonitorNetworkDisk(Files)Keyboardmouse内存与外设之间的数据传输WriteRead文件:存储在外部介质上数据的集合,是操作系统数据管理的单位,用文件名标识使用数据文件的目的大量数据的输入/输出长期保存程序运行的中间数据或结果数据数据文件的改动不引起程序的改动——程序与数据分离不同程序可以访问同一数据文件中的数据——数据共享IntroductionIntroduction文件分类按文件的逻辑结构:记录文件:由具有一定结构的记录组成(定长和不定长)流式文件:由一个个字符(字节)数据顺序组成按存储介质:普通文件:存储介质文件(磁盘、磁带等)设备文件:非存储介质(键盘、显示器、打印机等)按数据的组织形式:文本文件:
ASCII文件,每个字节存放一个字符的ASCII码二进制文件:数据按其在内存中的存储形式原样存放文本文件特点:存储量大、速度慢、便于对字符操作二进制文件特点:存储量小、速度快、便于存放中间结果例.int型数100000010011100010000内存存储形式0010011100010000二进制形式0011000100110000001100000011000000110000ASCII形式‘1’‘0’‘0’‘0’‘0’Introduction文件处理方法缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区Datasegmentosout(Write)In(Read)内存缓冲文件系统Filebuffersout(Write)In(Read)Introduction特点:减少读写次数,提高速度和数据管理质量文件结构体类型FILE
缓冲文件系统为每个正使用的文件在内存开辟文件信息区,存放有关文件操作的信息文件信息用系统定义的名为FILE的结构体描述FILE定义在<stdio.h>中typedefstruct{intfd;//文件号
unsignedflags;//文件操作方式
intbsize;//缓冲区大小
unsignedchar*buffer;//文件缓冲区位置
unsignedchar*curp;//文件当前读写位置}FILE;文件类型指针FILEPointertypedefstruct{shortlevel;/*fill/emptylevelofbuffer*/unsignedflags;/*Filestatusflags*/charfd;/*Filedescriptor*/unsignedcharhold;/*Ungetccharifnobuffer*/shortbsize;/*Buffersize*/unsignedchar*buffer;/*Datatransferbuffer*/unsignedchar*curp;/*Currentactivepointer*/unsignedistemp;/*Temporaryfileindicator*/shorttoken;/*Usedforvaliditychecking*/}FILE;/*ThisistheFILEobject*/文件类型指针变量定义:FILE
*fp;用法:文件打开时,系统自动建立文件结构体,并把指向它的指针返回来,程序通过这个指针获得文件信息,访问文件文件关闭后,它的文件结构体被释放操作文件前应先定义FILE指针变量文件名文件使用方式FILE指针CprogramOperatingSystemdisk文件类型指针FILEPointerC文件操作用库函数实现,包含在stdio.h文件使用步骤:打开文件-->文件读/写-->关闭文件系统自动打开和关闭三个标准设备文件标准输入------键盘stdin标准输出------显示器
stdout标准出错输出-----显示器stderr其余文件必须实施打开/关闭操作FILE*文件的打开与关闭"r"
"rb"只读,为输入打开一个文本/二进制文件;文件不存在,打开失败只写,为输出打开或建立一个文本/二进制文件;原来文件内容被覆盖读写,为读/写打开一个文本/二进制文件;文件不存在,打开失败读写,为读/写打开或建立一个文本/二进制文件;原来文件内容被覆盖读写,为读/写打开或建立一个文本/二进制文件;在文件尾追加数据追加,打开或建立一个文本/二进制文件,并在文件尾追加数据文件使用方式"w"
"wb""a"
"ab""r+"
"rb+""w+"
"wb+""a+"
"ab+"文件的打开fopen函数原型:FILE*fopen(char*name,char*mode)
功能:按指定方式打开文件返值:正常打开,为指向文件结构体的指针;打开失败,为NULL文件使用方式要打开的文件名例FILE
*fp;char*filename="c:\\fengyi\\bkc\\test.dat"
fp=fopen(filename,"r");例
FILE*fp;
fp=fopen("c:\\fengyi\\bkc\\test.dat","r");例FILE
*fp;
fp=fopen("aa.c","w");if(fp==NULL){printf(“Fileopenerror!\n”);
exit(0);}作用:使文件指针变量与文件“脱钩”,释放文件结构体和文件指针文件的关闭fclose函数原型:int
fclose(FILE*fp)功能:关闭fp指向的文件返值:正常关闭,返回0;关闭出错,返回EOF文件打开时返回的文件类型指针DiskfileOutputbuffersInputbuffersDatasegmentaBuffer-filesystem不关闭文件可能会丢失数据fclose
文件I/O
与终端I/O#defineputchar(c)fputc(c,stdout)#definegetchar()fgetc(stdin)#defineputc(ch,fp)fputc(ch,fp)#definegetc(fp)fgetc(fp)文件读/写:字符I/Ofputc与fgetc函数原型:int
fputc(intc,FILE*fp)功能:把字符c写入fp指向的文件中返值:正常,返回c;出错,返回EOF函数原型:int
fgetc(FILE*fp)功能:从fp指向的文件中读入一个字符返值:正常,返回读到的代码值;
读到文件尾或出错,返回EOF字符I/O举例fputc与fgetc例从键盘输入字符,逐个存到磁盘文件中,直到输入‘#’为止#include<stdio.h>#include<process.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);}字符I/O举例fputc与fgetc#include<stdio.h>#include<process.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);}例读文本文件内容,并显示rfgetc(fp);EOF)fgetc(fp);fputc(ch,stdout);while()putchar(ch);判断文本文件是否结束()!=EOFch=fgetc(fp)字符I/O举例fputc与fgetc判断二进制文件是否结束while(!feof(fp)){c=fgetc(fp);
……..}函数原型:int
feof(FILE*fp)功能:判断文件是否结束返值:文件结束,返回真(非零);
文件未结束,返回0文件读/写:字符串I/Ofputs与fgets函数原型:int
fputs(char
*s,FILE*fp)功能:向fp指向的文件中写入字符串s返值:正常,返回写入的最后一个字符;出错,返回EOF函数原型:char
*fgets(char
*s,intn,FILE*fp)功能:从fp指向的文件读入n-1个字符送入s指向的内存区,
并在最后加一个‘\0’返值:正常,返回读取字符串首地址s;出错或文件尾,返回NULL说明:若读入n-1个字符前遇换行符或文件尾,即结束字符串I/Ofputs与fgets例从键盘读入若干字符串存入文件,直到输入空串为止;再从文件读回显示#include<stdio.h>#include<string.h>#include<process.h>voidmain(){FILE
*fp;charstring[81];if((fp=fopen("file.txt","w"))==NULL){printf("cann'topenfile");exit(0);}while(){fputs(string,
fp);
fputs("\n",fp);}
fclose(fp);if((fp=fopen("file.txt","r"))==NULL){printf("cann'topenfile");exit(0);}while()
fputs(string,stdout);fclose(fp);}strlen()>0gets(string)fgets(string,81,fp)!=NULL文件读/写:格式化I/Ofprintf与fscanffprintf(fp,"%d,%6.2f",i,t);fscanf(fp,"%d,%f",&i,&t);函数原型:intfprintf(FILE*fp,"%…",var,…)功能:按指定格式向fp指向的文件中写入数据返值:正常,返回写入数据个数;出错,返回EOF函数原型:intfscanf(FILE*fp,"%…",&var,…)
功能:按指定格式从fp指向的文件读入数据返值:正常,返回读取数据个数;出错或文件尾,返回EOF
const
char*format格式字符串格式化I/Ofprintf与fscanf例从键盘按格式输入数据,存到磁盘文件中去#include<stdio.h>#include<stdlib.h>voidmain(){chars[80],c[80];inta,b;
FILE
*fp;if((fp=fopen("test","w"))==NULL){puts("can'topenfile");exit(0);}
fscanf(stdin,"%s%d",
s,&a);
fprintf(fp,"%s%d",s,a);
fclose(fp);if((fp=fopen("test","r"))==NULL){puts("can'topenfile");exit(0);}fscanf(fp,"%s%d",c,&b);
fprintf(stdout,"%s%d\n",c,b);fclose(fp);}文件读/写:数据块I/Ofwrite与fread函数原型:
size_tfread(void*buffer,size_tsize,size_tcount,FILE*fp)功能:按指定格式从fp指向的文件中读入数据块返值:正常,返回读入数据块数;出错或文件尾,返回0函数原型:
size_tfwrite(void*buffer,size_tsize,size_tcount,FILE*fp)功能:按指定格式向fp指向的文件写入数据块返值:正常,返回写入数据块数;出错,返回0
buffer:指向要输入/输出数据块的首地址的指针size:每个要读/写的数据块的大小(字节数)count:要读/写的数据块的个数fp:要读/写的文件指针fread与fwrite一般用于二进制文件的输入/输出typedef
unsigned
size_t;floatf[10];FILE
*fp;fp=fopen("aa.dat","rb");fread(f,4,10,fp);for(i=0;i<10;i++)
fread(&f[i],4,1,fp);struct
student{intnum;charname[20];charsex;intage;floatscore[3];}stud[10];for(i=0;i<10;i++)
fread(&stud[i],sizeof(structstudent),1,fp);数据块I/Ofwrite与fread数据块I/Ofwrite与fread例从键盘输入4个学生数据,将其转存到磁盘文件中去#include<stdio.h>#defineSIZE4typedefstruct
student{charname[10];intnum;intage;charaddr[15];}STU;voidmain(){inti;
STU
stud[SIZE];for(i=0;i<SIZE;i++) scanf("%s%d%d%s",stud[i].name,&stud[i].num,
&stud[i].age,stud[i].addr);
save(stud);display(stud);}voidsave(STU
stud[]){FILE*fp;inti;if((fp=fopen(“c:\\stu_dat","wb"))==NULL){printf("cannotopenfile\n"); return;}for(i=0;i<SIZE;i++)if(!=1) printf("filewriteerror\n");
fclose(fp);}fwrite(&stud[i],sizeof(structstudent),1,fp)voiddisplay(STU*stud){FILE*fp;inti;if((fp=fopen("c:\\stu_dat","rb"))==NULL){printf("cannotopenfile\n");return;}for(i=0;i<SIZE;i++){fread(&stud[i],sizeof(struct
student),1,fp);printf("%-10s%4d%4d%-15s\n",stud[i].name,
stud[i].num,stud[i].age,stud[i].addr);}
fclose(fp);}例文件abc.txt内容如下:0123456789ABCDEF1.执行:fp=fopen("abc.txt","r");2.调用一次:fgetc(fp);3.接着执行:fgets(str,11,fp);几个概念文件位置指针----指向当前读写位置的指针
文件的定位几个概念文件位置指针----指向当前读写位置的指针函数原型:voidrewind(FILE*fp)功能:重置fp指向的文件位置指针到文件首返值:无
文件的定位文件读写方式顺序读写:位置指针按字节位置顺序移动随机读写:位置指针按需要移动到任意位置#include<stdio.h>#include<string.h>#include<process.h>voidmain(){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);}w+rewind(fp);
文件的定位函数原型:intfseek(FILE
*fp,long
offset,int
whence)功能:改变fp指向的文件位置指针的位置返值:正常,返回0;出错,返回非零函数原型:longftell(FILE*fp)功能:返回fp指向的文件位置指针的当前位置
用相对文件首的位移量表示返值:正常,返回文件位置指针位置;出错,返回-1Loffset:位移量(以起始点为基点,移动的字节数)>0
向后移动<0
向前移动whence:起始点文件开始SEEK_SET
0文件当前位置SEEK_CUR
1文件末尾SEEK_END
2fseek(fp,100L,0);fseek(fp,50L,1);fseek(fp,-10L,2);例磁盘文件上有4个学生数据,要求读入第1,3学生数据并显示voidmain(){inti;
STU
stud[SIZE];
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026校招:大北农科技集团笔试题及答案
- 2026校招:博洋控股集团面试题及答案
- 2025-2026学年劳动课教案
- 2025-2026学年亲子游戏教案app
- 2025-2026学年检查教案反馈
- 2026年广州城建职业学院单招职业适应性测试题库含答案详解(精练)
- 中药饮片购销员安全培训效果考核试卷含答案
- 2026年常州工业职业技术学院单招职业倾向性测试题库含答案详解(培优a卷)
- 2026年广州城市职业学院单招职业适应性测试题库带答案详解(黄金题型)
- 2026年广安职业技术学院单招职业倾向性考试题库及答案详解(名校卷)
- 征兵考试试题与答案详解
- 2025年扬州市邗江区辅警招聘考试题库附答案解析
- 露天矿安全教育培训课件
- 2025年CCAA注册审核员《产品认证基础》(真题卷)附答案
- 肾错构瘤破裂出血的护理
- 2026年湖南科技职业学院单招职业技能测试必刷测试卷附答案
- 天然气井控培训
- 2025年山东省春季高考统一考试畜牧养殖类文化课考试(数学)
- 2025华夏银行贷款合同样本范本
- 蜜雪冰城转让协议合同
- 超市员工劳务合同(标准版)
评论
0/150
提交评论