版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章文件,8.1文件概念和文件类型指针8.2用C语言打开和关闭文件8.3用C语言读写文件8.4用C语言定位和随机读写文件8.1文件概念和文件类型指针8.1文件:存储在外部介质上的数据集合,是操作系统数据管理的单元。文件分类:按照读写文件的方式分类:顺序文件。随机文件。按存储介质:磁盘文件:存储介质文件(磁盘、磁带等)。)。设备文件:非存储介质(键盘、显示器、打印机等)。)。根据文件结构分类:ASCII文件(文本文件):每个字节存储ASCII码,代表一个字符。二进制文件:数据按原样存储在内存中。file类型指针:FILE类型结构文件缓冲区文件系统在内存中为每个正在使用的文件打开一个文件信息区。
2、文件信息由系统定义的名为“文件”的结构描述。文件在stdio.h、typedef结构/* Turbo C文件类型声明*/短级别中定义;/*缓冲区满/空度*/无符号标志;/*文件状态标志*/char FD;/*文件描述符*/无符号字符保持;/*如果没有缓冲区,请勿读取字符*/short b size;/*缓冲区大小*/无符号char *缓冲区;/*数据传输缓冲区位置*/无符号字符* curl/*当前读/写位置*/无符号ist amp;/*临时文件指示*/短令牌;/*用作无效检测*/FILE;/*结构类型名称FILE */,文件指针定义形式FILE *文件结构指针名称;文件* fp。用法:当一个文
3、件被打开时,系统自动建立一个文件结构并返回一个指向它的指针,程序通过它获得文件信息并访问文件。当一个文件被关闭时,它的文件结构被释放。8.2 C语言文件的打开和关闭,以及系统自动打开和关闭的五个标准设备文件:打开文件打开功能头:文件*打开(char * filename,char * mode)功能:以指定方式打开文件。返回值:常开,是指向文件结构的指针;打开失败,为空。要打开的文件名和文件模式,例如文件打开和测试。文件*fp。如果(fp=fopen(“文件名”、“Rb”)=NULL)printf(“无法打开此文件”);退出(0);示例FILE * fpFP=fopen(“c : test”、
4、“Rb”);函数:int fclose(FILE *fp)函数:关闭fp指向的文件,释放文件结构和文件指针。返回值:正常为0;错误不是0。如果不关闭文件,可能会丢失数据。在8.3 C语言中,你可以读写文件。函数原型:int fputc(int ch,FILE *fp)函数:在fp指向的文件中写入一个字符ch。返回值:正常,返回ch;错误,这是电渗流。函数原型:int fgetc(FILE *fp)函数:从fp指向的文件中读取一个字符。返回值:正常,返回读取的字符;当读取文件结尾或有错误时,电渗流。例8-1读入文件ex8-1.cpp并在屏幕上显示。算法描述:定义文件指针fp。通过读取文本文件打开
5、文件“ex8-1.cpp”,并使fp指向该文件。如果打开文件时出现错误,给出提示并退出程序。读一个字符(读字符!=文件结尾符号)在屏幕上显示读取的字符,并从文件中读取下一个字符。关闭文件。根据分析,程序代码编写如下:# include # include void main()文件* FPchar ch如果(fp=fopen(ex8-1.cpp,r)=NULL)printf(Cnat打开文件ex8-1.cpp!n);退出(0);ch=fgetc(FP);/*从文件中读取字符*/while(ch!=EOF) /*判断它是否是文件的结尾*/put char(ch);/*使用putchar()函数在
6、屏幕上显示字符*/ch=fgetc(fp );/*继续从文件中读取一个字符*/fclose(FP);/*使用fclose()函数关闭文件*/,在示例8-2中,从键盘输入的字符存储在文本文件mydata中,当输入字符为#时,输入流结束,然后文件内容被读出并显示在屏幕上。算法思想:(1)定义文件类型指针fp。(2)以“W”模式打开文件“我的数据”,并在FP和“我的数据”文件之间建立联系。如果打开文件时出现错误,请提示错误信息并退出程序。(3)使用do while循环处理键入的字符,并将字符写入文件mydata,直到遇到符号#为止。(4)关闭文件,以及(5)以只读方式打开文件。(6)使用while循
7、环读出字符并判断它是否是文件结束符号(在每个文件的末尾有一个结束符号EOF)。如果不是文件结束符号,在屏幕上显示字符,然后读入下一个字符。(7)关闭文件。# include # include void main()FILE * FP;char ch如果(FP=fopen(“mydata”,“w”)=NULL)打印f(“不能创建文件my data!n”);退出(0);printf(输入字符串:n);do ch=getchar();/*从键盘输入字符*/fputc(ch,FP);/*在test.txt文件中写入字符*/while(ch!=电渗流);/*判断键盘输入是否完成*/fc lose(FP
8、);/*关闭文件*/FP=fopen(“我的数据”,“r”);/*以“r”模式打开mydata文件*/ch=fgetc(FP);当(ch!=EOF)put char(ch);ch=fgetc(FP);printf(n);fc lose(FP);函数putw函数:将整数变量值输出到fp关联文件函数getw(fp)函数:从fp关联文件中读取一个整数。函数原型:int fput(string,fpt)函数:将字符串(指向字符串、字符数组或字符串常量的指针)表示的字符串写入与文件指针fpt相关联的文件。返回值:函数fputs正常执行时,返回文件中写入的字符数,函数执行不正确时,返回值为EOF(-1)。
9、字符串输入函数:char * fgets (char * str,int n,file * FP);函数:从与文件指针fpt相关联的文件中读取n-1个字符,并将它们存储在由字符串表示的字符串对象中。如果在读取n-1个字符之前遇到新行字符N或文件终止符EOF,则遇到的新行字符被视为一个字符,然后在读取的字符串末尾自动添加一个字符串终止符0。返回值:正常,返回字符串指针;错误,返回空指针。示例8-4将长度不超过10的6个字符串写入文件myfile.txt算法描述:(1)定义文件类型指针fp。(2)以“W”模式打开文件myfile.txt,并在fp和myfile.txt文件之间建立联系。如果打开文件
10、时出现错误,请提示错误信息并退出程序。(3)使用for循环输入六个字符串六次。为了区分存储在文件中的字符串,在输入每个字符串后,使用函数调用fputc(n,fp)插入一个换行符。(4)关闭文件。程序代码:# includes dio . h # includes dlib . h void main()文件* FPint I;char s10如果(fp=fopen(myfile.txt,w)=NULL)打印f(错误);退出(0);printf(输入string :n);对于(I=1;I=4;i ) scanf(%s,s);fputs,FP);fputc(n,FP);fc lose(FP);示例
11、8-5从键盘输入一个字符串,将所有小写字母改为大写字母,并将其写入文件“abc.txt”中进行保存,输入的字符串以“#”结尾。然后在屏幕上显示文件“abc.txt”中内容。# include stdio . h # include stdlib . h # include string . h void main()FILE * FP;char str80int I=0;如果(FP=fopen(“ABC . txt”,“w”)=NULL)打印f(“无法打开文件”);退出(0);printf(“输入字符串:n”);获取(字符串);而(stri!=#) if(stri=a,format input
12、 function fscanf function:从与fpt相关联的文件中以ASCII码值读取数据,根据格式控制字符串中指定的数据格式进行转换,并将其发送到输入地址列表中相应项目指定的存储单元。打印格式函数fprintf函数:将输出表达式列表中的每一项从相应格式描述符的格式转换为相应的ASCII码,并输出到与fpt相关联的文件中。数据块输出函数fwrite函数调用形式:fwrite(缓冲区、大小、计数、FPT);其中burrer是内存中输出数据的起始地址;Size是要输出的字节数;Count指定在一次操作中输出多少字节的数据项;与被操作文件相关联的fpt文件指针;函数:从以缓冲区为头的内存中
13、取出计数次数的大小长度(总计数*大小字节),并将其输出到与fpt相关联的文件中。当函数正常运行时,返回值为输出项的个数,当函数出错时,返回值为-1。数据块输入函数fread函数调用形式:fread(缓冲区,大小,计数,FPT);其中:缓冲区是内存中读入数据的起始地址;Size是要读取的字节数;Count指定在一次操作中读取多少字节的数据项;fpt指向被操作文件的指针;功能:读取文件中与fpt相关联的大小长度(总计数*大小字节)计数次数,并将其存储在缓冲区指定的内存区域中。当函数正常运行时,返回值是读取的项目数,当它出错时,返回值是-1。编写程序将n(n100)名员工的数据信息写入文件emp。每
14、个员工的数据包括员工编号、姓名、性别、年龄和工资。算法描述:定义员工的结构类型,包括员工编号、姓名、性别、年龄和薪资信息;定义文件指针FP;错误信息由If给出(打开文件emp时出错);退出程序;输入整数n;循环输入n个员工的信息n次,并将其存储在结构的数据元素中;循环n次,通过fwrite函数将结构中的数组元素依次输出到与fp关联的文件emp中;关闭fp。根据算法描述编写程序代码:# include # include stdlib . h # define num 100 static struct employee charno 5;char name10char sex3国际年龄;int
15、 salarempnumvoid main()FILE * FP;int n,I;char inbuf20如果(fp=fopen(emp,WB)=NULL)打印(不能创建文件empn);退出(0);打印(输入电磁脉冲数字:n);Scanf(%d,程序演示,示例8-7显示并输出上一示例生成的emp文件中的员工信息。/* ex8-14 . CPP */# include # include stdlib . h # define num 100 static struct employee char no 5;char name10char sex3国际年龄;int salarempnumvoid
16、 main()FILE * FP;int I=0;if(fp=fopen(emp,r)=NULL) printf(cnat打开文件empn);退出(0);Printf(“员工编号名称性别年龄工资n”);而(1)fread(8.4 C语言的程序演示、文件位置和随机读写),文件位置指针:指向当前读写位置的指针。读写模式:顺序读写:位置指针按字节位置顺序移动。随机读写:位置指针根据需要移动到任意位置。倒带功能:无效倒带(FILE * FP););功能:将fp指向的文件位置指针复位到文件的开头。返回值:none,get文件记录指针位置函数ftell函数原型:ftell(fpt)。函数:获取记录指针在文件中的当前位置,并返回相对于文件头的位移。返回值:当函数正常执行时,返回文件内部记录指针的当前操作位置,出错时返回值为-1L。f SEK函数原型:int fseek(文件* FP,长偏移量,int原点);功能:改变文件位置指针的位置。返回值:成功,返回0;失败并返回非零值。写一个程序来显示电磁脉冲文件的长度。# inclu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中政治教师年度考核述职报告范文(3篇)
- 幼师师德师风个人述职报告(5篇)
- 2026云计算产业发展分析及前景预测与投资战略研究报告
- 2026中国保险科技应用场景与市场发展潜力研究报告
- 2026以色列农业科技创新与节水灌溉技术发展评估规划分析报告
- 2026全球农化监管趋严对246三氯苯肼出口贸易壁垒影响深度研究报告
- 2026AI视觉检测赋能塑胶框质检环节的人效比与数据资产化研报2026塑胶框模具全生命周期管理与数字化孪生降本增效路径研究报告
- 2026年大学试题(财经商贸)-税收征管法历年参考题库含答案解析
- 2026年大学试题(计算机科学)-工业用微型计算机历年参考题库含答案解析
- 2026年大学试题(管理类)-项目时间管理历年参考题库含答案解析
- 2026秋苏教版小学科学六年级上册第 1 单元 物质的变化《2 燃烧与空气》教学设计
- 2026年声学计量工专项题库(附答案与解释)
- 输电工程线路路径勘察方案
- 易流态化固体散装货物安全装运须知培训
- (教师考编考试)教育学原理知识点重点
- 2026年中国远洋海运集团招聘笔试大纲及备考指南
- 2026年中泰证券股份有限公司校园招聘笔试参考题库及答案解析
- 公司内部考证补贴制度
- 江西省南昌市2025-2026学年上学期期末八年级数学试卷(含答案)
- 2026年蔚蓝锂芯行测笔试题库
- 检验临床技能培训中伦理责任意识培育
评论
0/150
提交评论