版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章文件文件68.1文件基本概念及分类8.2文件类型指针8.3文件的打开与关闭8.4文件的读写8.5文件的定位8.6C语言学习之路8.7本章小结8.1文件基本概念及分类文件在计算机领域是一个重要的概念,它其实是指存储在计算机外存上的一组相关数据的有序集合。数据集合的名称就叫文件名,在系统当中是唯一的,是其本身的操作标志。前面的各章中涉及到的源程序文件、目标文件、可执行文件、库文件等等都可以叫作文件。C语言提供了强大的机制支持文件的各类操作。本章重点围绕ASCII码文件和二进制码文件进行学习。ASCII文件也叫文本文件,它在磁盘中存放时每个字节存储一个ASCII表示的字符。文本文件是可以直接阅读的,可使用记事本打开,其扩展名为.txt。二进制文件是按内存中的二进制的存储形式原样输出到磁盘上来保存,因此这类文件一般不能使用记事本直接打开来阅读其中内容。C系统在处理文件时,就把文件看成是字节流或二进制流,按字节进行处理。本章将重点讲解ANSIC规定文件系统及其标准输入输出函数。8.2文件类型指针所谓文件指针,实际上是指向结构体类型的指针变量,这个结构体中包含文件的信息,如缓冲区的地址,在缓冲区中当前存取的字符的位置,对文件是“读”还是“写”,是否出错,是否已经遇到文件结束标志等信息。此结构体类型名为FILE,可以由此类型来定义文件指针。定义文件类型指针变量的一般形式为: FILE*指针变量标识符;例如: FILE*fp;fp被定义为指向文件类型的指针变量,称为文件指针。文件指针用于指向多个文件,实际上是用于存放文件缓冲区的地址。在缓冲文件系统中可以进行文件的打开、关闭、读、写、定位等操作。结构类型名“FILE”必须大写。一般情况下对文件操作有3个步骤:打开文件,即在计算机内存中开辟缓冲区,用于存放被打开文件的相关信息;文件处理,包括读写、定位等操作;关闭文件,将缓冲区中的内容写回到磁盘,然后释放缓冲区。8.3文件的打开与关闭8.3.1文件打开函数fopen()fopen()函数用来打开一个文件,其调用的一般形式为:
文件指针名=fopen(文件名,打开文件方式)其中,“文件指针名”必须是被说明为FILE类型的指针变量;“文件名”是被打开文件的文件名,
以字符串常量或字符串数组的形式出现;“打开文件方式”是指文件的类型和操作要求。例如: FILE*fp; fp=("C:\\myfile.txt","wt");其意义是在C盘根目录下只写打开或建立一个文本文件myfile,只允许写数据操作,并使文件指针fp指向该文件。文件名字符串中两个反斜线“\\”中的第一个表示转义字符,第二个表示根目录。8.3文件的打开与关闭8.3.1文件打开函数fopen()打开文件的方式有12种,如下表所示打开方式文件类型含义“r”文本文件只读打开一个文本文件,只允许读数据“w”文本文件只写打开或建立一个文本文件,只允许写数据“a”文本文件追加打开一个文本文件,并在文件末尾写数据“r+”文本文件读写打开一个文本文件,允许读和写“w+”文本文件读写打开或建立一个文本文件,允许读写“a+”文本文件读写打开一个文本文件,允许读,或在文件末追加数据“rb”二进制文件只读打开一个二进制文件,只允许读数据“wb”二进制文件只写打开或建立一个二进制文件,只允许写数据“ab”二进制文件追加打开一个二进制文件,并在文件末尾写数据“rb+”二进制文件读写打开一个二进制文件,允许读和写“wb+”二进制文件读写打开或建立一个二进制文件,允许读和写“ab+”二进制文件读写打开一个二进制文件,允许读,或在文件末追加数据8.3文件的打开与关闭8.3.2文件关闭函数fclose()文件一旦使用完毕,要用关闭文件函数fclose()把文件关闭,以避免文件的数据丢失等情况发生。fclose()函数调用的一般形式是: fclose(文件指针);例如: fclose(fp);正常完成关闭文件操作时,fclose()函数返回值为0;返回非零值表示有错误发生。8.3文件的打开与关闭例8.1演示打开和关闭文本文件#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;if((fp=fopen("c:\\myfile.txt","wt"))==NULL){printf("打开文件失败\n");exit(0);}printf("打开文件成功!");//此处可替换为对文件的读写操作语句
if(fclose(fp)==0)printf("\n成功关闭文件!\n");elseprintf("\n未成功关闭文件!\n");system("pause");return0;}本程序演示了文件打开和关闭的过程。如果文件未成功打开,则打印“不能打开文件”,否则打印“文件被成功打开!”;如果文件成功关闭,则打印“成功关闭文件!”。正常情况下,该程序会在C盘根目录下以读写的方式建立myfile.txt文件,然后再把它关闭。8.4文件的读写8.4.1字符读写函数:fgetc()和fputc()1、fputc()功能是将多个字符写到文件中,一般形式为:fputc(字符数据,文件指针);例如:charc=‘a’;fput(c,fp);//其中fp是已经正确打开的可写文件的指针该语句将变量c的值写入fp所指向的文件中。2、fgetc()功能是从文件中读取多个字符,一般形式为:fgetc(文件指针);例如:charch;ch=fgetc(fp);表示从文件fp中读取多个字符,赋给变量ch,而fp的位置指针向前移动到下一个字符。8.4文件的读写8.4.1字符读写函数:fgetc()和fputc()例8.2演示向打开的文本文件中写入或读取一个字符#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;charch='a';charch1='b';//ch1初始值设置为’b’if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打开文件失败!\n");exit(0);}
printf("打开文件成功!\n");fputc(ch,fp);rewind(fp);//将文件指针重新指向文件开头
printf("ch1初始值为:%c\n",ch1);ch1=fgetc(fp);printf("ch1现在的值为:%c\n",ch1);
if(fclose(fp)==0)printf("关闭文件成功!\n");elseprintf("关闭文件失败!\n");system("pause");return0;}8.4文件的读写8.4.2字符串读写函数:fgets()和fputs()1、fputs()功能是向指定文件输出字符串,一般形式为:fputs(字符串,文件指针);2、fgets()功能是从文件中读字符串,一般形式为:fgets(字符串起始地址,字符数量,文件指针);例8.3演示向打开的文本文件中写入或读取字符串#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;charch[]=”helloworld”;charch1[30]=”abcdefg”;if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打开文件失败!\n");exit(0);
}printf("打开文件成功!\n");fputs(ch,fp);rewind(fp);//将文件指针重新指向文件开头printf("ch1初始值为:%s\n",ch1);fgets(ch1,4,fp);//从文件中取4-1=3个字符,留一个字节存放’\0’printf("ch1现在的值为:%s\n",ch1);
if(fclose(fp)==0)printf("关闭文件成功!\n");elseprintf("关闭文件失败!\n");system("pause");return0;}8.4文件的读写8.4.3数据块读写函数:freed()和fwrite()1、fread()函数的功能是从文件中读取数据块,一般形式为: fread(buffer,size,count,fp);关于fread()的几点说明:(1)fp是文件指针;buffer是一个指针,用来存放输出数据块的地址;size表示数据块的字节数;count表示要读取的数据块块数;(2)fread()函数的功能是从fp所指向文件的当前位置开始,一次读取size个字节,重复count次,并将读取的数据存放到从buffer开始的内存中;同时,将位置指针向前移动size*count个字节;(3)如果调用fread()函数成功,则函数返回值等于count。2、fwrite函数的功能是向文件写数据块,其调用的一般形式为: fwrite(buffer,size,count,fp);关于fwrite()的几点说明:(1)fp是文件指针;buffer是一个指针,用来存放将要读取数据块的地址;size表示一个数据块的字节数;count表示要写的数据块个数;(2)fwrite()函数功能是从buffer指定的地址开始,一次输出size个字节,重复count次,并将输出的数据存放到fp所指向的文件中;同时,将位置指针向前移动size*count个字节。(3)如果调用fwrite函数成功,则函数返回值等于count。8.4文件的读写8.4.3数据块读写函数:freed()和fwrite()例8.4演示向打开的文本文件中写入或读取若干数据块#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;charch[]="Helloeveryone,howareyou?";charch1[30]="1234567890";if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打开文件失败!\n");exit(0);}
printf("打开文件成功!\n");fwrite(ch,5,3,fp);//从ch字符串中取3*5=15个字符的
//数据存入fp中rewind(fp);//将文件指针重新指向文件开头printf("ch1初始值为:%s\n",ch1);
fread(ch1,4,2,fp);//从fp中取2*4=8个字符的
//数据存入ch1字符数组中printf("ch1现在的值为:%s\n",ch1);
if(fclose(fp)==0)printf("关闭文件成功!\n");elseprintf("关闭文件失败!\n");system("pause");return0;}8.4文件的读写8.4.4格式化读写函数:fscanf()和fprinf()1、fprintf()函数只能向文本文件中输出数据。fprintf()函数和printf()函数相似,只是输出的内容将按指定格式存放到磁盘的文本文件中,而不是屏幕上。fprintf()函数的调用形式如下: fprintf(文件指针,格式控制字符串,输出项表);//参考printf()函数 fprintf(fp,"%d%d",x,y);//fp为以写入的方式正确打开的文件指针2、fscanf()函数只能从文本文件中按格式输出。fscanf()函数和scanf()函数相似,其输出的对象是磁盘上文本文件中的数据,而不是键盘的输入数据。fscanf()函数的调用形式如下: fscanf(文件指针,格式控制字符串,输出项表);//参考scanf()函数 fscanf(fp,"%d%d",&a,&b);
8.4文件的读写8.4.4格式化读写函数:fscanf()和fprinf()例8.5演示按指定格式向打开的文本文件中写入或读取一个字符#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp;charch=’x’;charch1=’a’;if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打开文件失败!\n");exit(0);}printf("打开文件成功!\n");fprintf(fp,”%c”,ch);//向打开的文件中输出ch中的值’x’rewind(fp);//将文件指针重新指向文件开头printf("ch1初始值为:%c\n",ch1);fscanf(fp,”%c”,&ch1);//从打开的文件中输入一个字符,保存到ch1中
//与scanf()用法一样,参数要使用&表示地址printf("ch1现在的值为:%c\n",ch1);if(fclose(fp)==0)printf("关闭文件成功!\n");elseprintf("关闭文件失败!\n");system("pause");return0;}8.5文件的定位8.5.1rewind()函数rewind函数的调用形式为: rewind(fp);该函数的作用是将文件指针返回文件开头位置8.5文件的定位8.5.2fseek()函数函数fseek()是文件定位函数,其一般调用形式为: fseek(文件类型指针,位置字节数,起始位置)起始位置有0,1,2三个参数可以选择:0代表文件开始位置;1代表当前位置;2代表文件末尾。注意:该函数多用于二进制文件,但也可以用于文本文件,不过要精确的控制位置量,不然由于文本文件要进行字符转换,会发生一定的错误。8.5文件的定位例8.6演示fseek()函数进行文件定位#include"stdio.h"#include"stdlib.h"intmain(){FILE*fp; inti;charch;if((fp=fopen("c:\\myfile.txt","w+"))==NULL){printf("打开文件失败\n");exit(0);}printf("打开文件成功\n"); //以下for循环用于向打开的文件中输入26个小写字母 for(i=0;i<26;i++) { ch=i+97; fputc(ch,fp); } fseek(fp,1,0);//以文件开头为起点,将fp向后移动一个字节位置
ch=fgetc(fp);//获得该位置的一个字符并赋值给ch printf("%c\n",ch); //打印ch存储的字符if(fclose(fp)==0)printf("关闭文件成功!\n");elseprintf("关闭文件失败!\n");
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全科医生基层实践培训
- 医疗器械高值耗材
- 【数学】空间向量与立体几何同步练习-2024-2025学年高二上学期数学人教A版(2019)选择性必修第一册
- 动脉瘤的护理
- 企业品牌战略培训
- 2024标准广告公司合同书
- 2024至2030年中国导电导热胶带数据监测研究报告
- 2024年玉米免耕播种机项目评估分析报告
- 2023年植入性支架项目评价分析报告
- 2024至2030年中国自动式温度调节阀数据监测研究报告
- 深圳大学《西方文明史》2023-2024学年第一学期期末试卷
- 2024-2030年中国肉牛养殖产业前景预测及投资效益分析报告权威版
- 2024年同等学力申硕英语考试真题
- 河北省石家庄市长安区2023-2024学年五年级上学期期中英语试卷
- 初中数学30种模型(几何知识点)
- 多能互补规划
- 天一大联考●皖豫名校联盟2024-2025学年高三上学期10月月考试卷语文答案
- GB/T 44291-2024农村产权流转交易 网络交易平台服务规范
- 全国农业技术推广服务中心公开招聘应届毕业生补充(北京)高频难、易错点500题模拟试题附带答案详解
- 公司研发项目审核管理制度
- 山东省名校考试联盟2024-2025学年高一上学期10月联考数学试卷
评论
0/150
提交评论