




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章文件,一、C文件概述,C程序与磁盘文件本章讨论的文件主要是指可供C程序在执行过程中从磁盘读取数据或写入数据的文件。,磁盘文件分类,按其存储方式,C文件可以分为:ASCII文件(文本文件)按数据的ASCII编码方式存放(可用文字编辑软件如“记事本”打开来看)。二进制文件按数据在内存中存储的形式原样存放(0和1的集合)C系统在处理这些文件时,并不区分类型,都看成是字符流(即以字节为存取单位)。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制,故称“流式文件”。,C程序与文件读写,ANSIC提供四种读写文件的方法,通过四组函数进行:读写一个字符:fgetcfputc读写一个字符串:fgetsfputs格式化读写:fscanffprintf读写一个“记录”(成“块”读写):freadfwrite文件读写(文件操作)的基本步骤是:1、定义文件类型指针变量2、打开文件3、读写文件4、关闭文件,二、文件操作,文件打开/关闭程序的基本形式示例(设文件名为ABC.TXT):main()FILE*fp;/*声明文件型指针变量*/fp=fopen(“ABC.txt”,“w”);/*按指定文件使用方式打开文件*/*输入输出等*/fclose(fp);/*关闭文件*/,文件名:操作系统里面:反斜杠f:testabc.txtC程序里面:转义字符反斜杠f:testabc.txt,示例程序说明,FILE*fp;FILE是系统定义的结构体类型。P286文件打开后,fp即代表该文件通常需要判断该文件是否打开打开成功时,fopen()返回文件信息区的起始地址,失败则返回0(NULL)。if(fp=fopen()=NULL)printf(“打开失败”);exit(0);,示例程序说明(续),文件使用方式P288表8.1基本方式是r(只读)w(只写)a(追加)加b:对二进制文件加+:读写注意:r和a要求该文件必须存在,否则出错(返回NULL)w为新建文件(如原来存在同名文件,被复盖),二、文件操作,文件的读写P289设文件指针变量为fp单字符读写P290写入fputc(ch,fp)读入x=fgetc(fp)遇到文件末时,返回EOF(文件结束符,即-1)通常可用while(ch!=EOF)或while(!feof(fp)控制读取循环。P292比较:putchar(c)x=getchar(),文件的读写(二),字符串读写P295写入fputs(str,fp)读入fgets(str,n,fp)从fp所指文件中读入n-1个字节数据给字符数组str(未尾加0,遇EOF即结束)比较:puts(str)gets(str),示例,#defineNULL0#defineEOF-1#includeFILE*fpr,*fpw;main()charch;if(fpr=fopen(d:tcTEST.DAT,rw)=NULL)printf(打开失败);exit(0);if(fpw=fopen(abc.txt,“w)=NULL)printf(打开失败);exit(0);ch=fgetc(fpr);while(ch!=EOF)printf(%c,ch);fputc(ch,fpw);ch=getc(fpr);fclose(fpr);fclose(fpw);,运行之,打开两个文件观看结果。将fpw打开方式改为a后连续运行几次,看看abc.txt的结果。,示例,#defineNULL0#includeFILE*fp;char*s=123;main()charch;clrscr();if(fp=fopen(d:tca.dat,r+)=NULL)printf(文件打开失败);exit(0);fgets(s,10,fp);puts(s);fputs(Hello,fp);fputs(myfriends!,fp);fclose(fp);,运行之,打开文件a.dat观看结果。将fp打开方式改为a+后连续运行几次,看看结果。,文件的读写(三),格式化读写P297适用于一般实体,如数值型变量。fscanf(fp,“%d,%f”,文件的读写(四),读写一个“记录”(成“块”读写)P299适用于结构体等复杂实体。写入fread(p,size,n,fp)读入fwrite(p,size,n,fp)p-实体指针size-字节数n-多少次fp-文件指针调用成功,返回n值。示例:,文件的定位(五)p302,文件中有一个位置指针,指向当前读写的位置。顺序读写一个文件时,每读写完一个字符,位置指针自动下移一个字符位置。以下函数可用于强制改变位置指针的位置。rewind(fp)使fp所指文件位置指针回到文件开头(以便从头再读写)voidrewind(FILE*fp);fseek(fp,n,i)改变文件的位置指针intfseek(FILE*fp,longintoffst,intorgn);,ftell函数ftell函数能告知用户位置指针的当前指向。例如ftell(fp)的值是fp所指向的文件中位置指针的当前指向。如果出错(例如不存在此文件),则ftell函数返回值为-1。其原型为:longintftell(FILE*fp);,关于fseek(fp,n,i),fp文件指针n位移量(以起始点为基点,向前移动的字节数,负数为倒移的字节数)i起始点,函数ftell(fp)用于获得位置指针在文件中的当前位置(用相对于文件开头的位移量来表示)。,#include#includecharbuff32768;intmain(intargc,char*argv)FILE*fp1,*fp2;unsignedintbfsz=32768;unsignedlongi=0;if(fp1=fopen(argv1,”rb”)=0)printf(“cantopenfile%s.”,argv1);exit(1);if(fp2=fopen(argv2,”wb”)=0)printf(“cantopenfile%s.”,argv2);exit(1);,while(bfsz)if(fread(buff,bfsz,1,fp1)fwrite(buff,bfsz,1,fp2);i=i+bfsz;elsefseek(fp1,i,0);bfsz=bfsz/2;fclose(fp1);fclose(fp2);return0;,文件操作的出错检测(六),1ferror函数fgets、putc、getc、fread、fwrite等I/O函数在调用时,如果出现错误,有可能在返回值上有所反映,但是并不准确。例如,fgets函数返回NULL,其原因可能是文件结束也可能是出错。ferror()则可以明确第检查是否出错,它的原型为:intferror(FILE*s
温馨提示
- 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年标准)债权继承还款协议书
- 2025年浙江省初中学业水平考试数学试卷真题(精校打印)
- 【国际能源署】全球电动汽车2025展望
- 最小单元应急管理制度
- 税收征管数字化转型实践的国际比较及借鉴
- 2025-2030中国羽绒服行业市场发展分析及发展趋势与投资方向研究报告
- 黑龙江:用水定额(DB23-T 727-2021)
- 显微注射技术课件
- 医疗健康领域的数字化人才培养计划
- 汽车贴膜外包合同范本
- DB31/T 1341-2021商务办公建筑合理用能指南
- 综合门诊部管理制度
评论
0/150
提交评论