




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、文件的基本操作,第13章,13.1文件的基本概念,有很多类型的文件,如:根据文件的内容分为:源程序,图形文件,音频文件,数据文件等。根据数据的组织形式,它分为文本文件和二进制文件。c语言可以读写文本文件和二进制文件。13.2标准输入/输出和非标准输入/输出,1。标准输入/输出(缓冲文件系统),每个文件将在内存中创建一个“缓冲区”。缓冲区的功能是临时存储数据,减少读写磁盘的次数。第二,系统输入/输出(非缓冲文件系统),系统不设置缓冲区,这是由用户设置的。系统输入/输出也称为低级文件系统。标准输入输出和系统输入输出采用不同的输入输出功能,按照打开、读取或关闭的顺序操作文件。第三,标准输入输出的读写
2、功能,1。读写一个字符:fgetc();fputc();2.读写字符串:fgets();fput();3。格式化读写变量:fs canf();fprintf();4。格式化和读写记录(块):fread();fwrite();13.3文件类型指针,要调用文件,系统需要以下信息:文件的当前读写位置;文件对应的内存缓冲区地址;缓冲区中未处理的字符数;文件的操作模式。对于标准输入/输出,系统将在内存中为每个文件打开一个“文件信息区”来存储上述信息。特别指出,文件操作所需的“文件信息”是一个结构变量,该结构变量由系统以typedefstruct、文件的形式定义;来存储文件信息,用户只需要定义指向文件类型
3、的指针变量。如: FILE *fp1,* fp2,13.4文件打开和关闭,首先,文件打开,使用fopen()函数。调用模式:fopen(文件名,文件操作模式);它返回指向文件的指针或错误标志NULL。文件操作模式:r以只读模式打开文本文件,w以只写模式打开文本文件,a添加文本文件,r以读/写模式打开文本文件,w以读/写模式创建新的文本文件,a以读/写模式打开文本文件,rb以只读模式打开二进制文件,Wb以只写模式打开二进制文件,ab以附加模式打开二进制文件, rb以读/写模式打开一个二进制文件,wb以读/写模式创建一个新的二进制文件,ab以读/写模式打开一个二进制文件,例如:# include
4、main()FILE * p; p=fopen(“test . txt”,“r”);如果(p=NULL) printf(“文件打开错误”);退出(0);printf(文件打开正常);关注:文件“test.txt”在哪里?在程序结束前没有关闭打开的文件,文件会被破坏吗?文件test.txt的内容是什么?c语言规定fopen()函数中的文件名可以在当前工作目录下(相对路径)或指定路径下(绝对路径)。例如fopen(c : dos config。sys,r);其次,关闭文件,并使用fclose()函数。调用方法是fclose(文件指针变量);功能:关闭打开的文件(释放文件信息区),1。fputc和f
5、getc函数,fputc(字符变量,文件指针变量);函数:将字符变量的值输出到文件指针变量所指向的文件。13.5。文件的读写,注意:向文件写入数据时,如果文件不存在,系统将创建一个新文件。如果文件已经存在,当文件以W模式打开时,文件的原始内容将在打开时被冲走。当文件以A模式打开时,文件的原始内容被保留,写入文件的内容被插入文件的尾部。编写一个程序,将一个字符串写入mytest1.txt文件,并输入字符!作为结尾。#包括main()FILE * FP;char chfp=fopen(mytest1.txt,w);如果(fp=NULL)打印(文件打开错误);else while (ch=getch
6、ar()!=!)fputc(ch,fp),input:fgetc(文件指针变量),在运行时,返回值:character,function:从指定文件的当前位置读取一个字符,例如,在当前目录中有一个名为gh.txt的文件,这需要一个程序在屏幕上打印该文件的内容。# include main()FILE * FP;char chfp=fopen(gh.txt,r);如果(fp=NULL)打印(文件打开错误);else while(ch=fgetc(fp)!=EOF)put char(ch);f close(FP);注意:gh.txt文件必须与程序的执行文件在同一目录中。fputs(数组名,文件指针
7、变量);函数:将数组的内容(不包括0)输出到文件指针变量所指向的文件中。2。fputs和fgets函数,# include # include main()FILE * FP;char w20FP=fopen(“my test 2 . txt”,“w”);如果(fp=NULL)打印(文件打开错误);else while(strlen(get(w)0)fput(w,FP);fput(“n”,FP);f close(FP);思考:没有这个陈述,程序的运行结果会是什么?如何结束程序?运行时输入:输入字符串的长度不应超过数组定义的大小,否则将出现错误。读取的字符包括换行符“n”或文件结束符“EOF”。
8、如果读取了文件结束符号,函数的返回值为1;在读取字符后会自动添加字符串终止符“0”,如果您读取了文件的结尾或出错,那么NULL fgets()的返回值就是数组名。注意:fgets(数组名,n个字符,文件指针变量);函数:从文件指针指向的文件中读取字符串,并将读取的字符放入数组中。例如:# include main()FILE * FP;char w81int k=0;fp=fopen(file.txt , r );如果(fp=NULL)打印文件(“文件打开错误”);else while (fgets(w,80,fp)!=空)k=k1;printf(%s,w);printf(k=%d,k);f
9、close(FP);将file.txt文件的内容打印到屏幕上,并计算文件中有多少行。(1)从文件中读取:fread(缓冲区、大小、计数、FP);(2)向文件写入数据(缓冲区、大小、计数、FP);其中:缓冲区数据存储的起始地址,按大小读写的字节数,按大小长度读写的数据数,fp文件指针变量,特点:可以输入输出数组和结构数据作为一个整体。返回值:count的值。注意:当使用fread()和fwrite读写文件时,文件必须以二进制模式打开。3。fread和fwrite函数,示例13.03,4。fscanf和fprintf函数,fscanf(文件指针变量,格式控制器字符串,变量地址表列);函数:从文件指
10、针指向的文件中读取指定格式的变量,并将读取的变量保存到相应的变量中。示例:fscanf(fp,%s %d %f,name)有一个包含以下内容的文件data . txt:apple 30 4.5、pear 20 3.8、banana 25 2.0、orange 30 2.5,它要求以变量的形式取出文件内容。例如:# include main()FILE * FP;char name20int n;浮动p;FP=flpen(“data . txt”,“r”);如果(FP=null) printf(“文件打开错误n”)else while(fscanf(FP,“%s% d% f”),name,程序运
11、行结果:name=appleu=30p=4.50,name=pearu=20p=3.80,name=文件的数据格式要求每个数据用空格分隔。如果文件中的数据没有字符串,数据可以用逗号分隔。如果文件中的数据用逗号分隔,如何将每个数据读入一个变量?注意:想想:fprintf(文件指针变量,格式控制器字符串,变量名表列);函数:将变量表列中的数据按照指定的格式输入文件,如fprintf(fp,%d %f %s,a,b,w);示例:# include main()FILE * FP;int a;浮动b;char ch,w20FP=fo per(“my test 3 . txt”,“w”);if (fp=
12、NULL) printf(“文件打开错误”);else scanf(“% s”,w);当(strlen (w) 1)扫描f (%d% f),fclose (FP)时,输入:在运行时,检查当前目录中的mytest3.txt,并使用fgetc(),fgets(),fprintf()来达到相同的目的。13.6文件的随机读写,以及前面介绍的几种文件读写都是顺序读写。问题:打开文件后,在指定位置读写数据,减少一些不必要的中间环节。解决方法:将文件指针移动到指定位置。关键步骤:文件定位。示例:文件data1.txt的内容如下:这是一个测试。C语言编程,随机读写功能测试。需要编写一个程序来随机读出指定的记录
13、。1。重定位功能,倒带(文件指针变量),功能:使文件指针返回到文件的开头,不返回值。例13.04,例2。文件定位功能,fseek(文件指针变量,位移,起始点),注意:起始点只有三个值:位移:以起始点为起始点移动的字节数,0文件开始。位移应该很长,f SEK的返回值():0成功,非零失败,例如:f SEK(FP,20l,0);将文件头的位置指针移动20字节,偏移量(fp,10l,1);将位置指针从文件末尾移至30字节,fseek(fp,30l,2);将位置从当前位置向后移动10个字节,例如13.05,3。位置函数,ftell(文件指针变量);函数:返回位置指针的当前指向,返回值:0,文件指针的当
14、前指向,1。错误,4。文件操作的错误检测,对于大多数标准的输入输出功能,C语言没有明确的错误信息。调用形式:ferror(fp),文件指针,返回值:0:无错误,非0:错误,ferror函数的值是最后一次调用时的错误状态。13.7系统I/O(低级I/O),系统I/O的特点:没有文件结构,不需要定义文件类型指针,没有读写单个字符、字符串和格式化数据的能力,只有一种文件读写方法,主要针对二进制文件,难以编程,执行效率高。缓冲区的大小在程序中设置(它是程序的一部分)。首先,文件被打开。功能:以文件夹的形式打开文件名指定的文件。filename可以是带有路径的文件名,路径可以由字符串、字符数组名称和指向
15、字符串的指针来表示。文件的打开方式,O _ RDONLY:以只读方式打开文件,O _ WRONLY:以只写方式打开文件,O_RDWR:以读写方式打开文件(读写同一个文件),o _ append3360以添加方式打开文件。从文件的末尾,O_CREAT :创建一个新的写入文件(如果文件已经存在,该项无效),当oflag为O_CREAT,并且S_IWRITE仅写入时,pmode用于指定新文件的允许操作模式。S_IREAD只写权限,S_IWRITE|IREAD读/写权限,2。读取函数,int read(句柄,buf,计数);函数:从与句柄相关联的文件中读取计数字节的内容,并将其放入buf指定的缓冲区中。句柄文件号,buf缓冲区地址,计算一次可以读取的最大字节数。4.移动读写指针,long lseek (int句柄,long offer,从哪里开始);函数:将与句柄相关联的文件指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院幼儿护理视频课件
- 2024年智能人体秤项目投资申请报告代可行性研究报告
- 2024年硅系铁合金资金筹措计划书代可行性研究报告
- 落实检察官登记管理办法
- 2024年特种运输资金需求报告代可行性研究报告
- 融媒体教室使用管理办法
- 衡水消防车管理办法规定
- 行政执法公务员管理办法
- 装配式住宅运输管理办法
- 西安市疫情分级管理办法
- 初中道德与法治学科教学经验交流
- 工程测量、定位放线控制点复核记录表
- 申办出入境证件的函
- 七年级音乐作业
- 安全评估收费指导意见
- 全过程工程造价咨询服务实施方案
- DB34-T 4289-2022城镇检查井盖安装管理技术规程
- 江苏建筑施工安全台账(正式版)
- 贵州省建筑与装饰工程计价定额(2023版)
- 净化磷酸装置水联动试车方案
- 灰树花白桦茸课件
评论
0/150
提交评论