版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、掌握文件的概念掌握文件的概念掌握文件类型指针掌握文件类型指针掌握文件的打开和关闭掌握文件的打开和关闭掌握文件的读写掌握文件的读写 掌握两类指针掌握两类指针 文件指针文件指针 和文件内部指针和文件内部指针 几组函数几组函数Fp=Fopen( “c:1.txt”,”r”); Fclose(fp)字符级函数字符级函数Ch=Fgetc(fp);fputc(a,fp);字符串级函数字符串级函数Fgets(s,5,fp);fputs(“abcd”,f);数据块读写数据块读写Fread(buffer,size ,count ,fp) ;fwrite(buffer,sizeof(struct st),coun
2、t,fp)格式化读写格式化读写Fscanf(fp, , ) fprintf(fp,)随机文件的读写随机文件的读写Rewind(fp)fSeek(fp, ,) 10.1.1 10.1.1什么是文件什么是文件所谓文件一般指存储在外部介质所谓文件一般指存储在外部介质( (如磁盘磁带如磁盘磁带) )上上数据的集合数据的集合. .操作系统是以文件为单位对数据进行管理的操作系统是以文件为单位对数据进行管理的. .文件分类文件分类从用户的角度看从用户的角度看, ,文件可分为普通文件和设备文件文件可分为普通文件和设备文件. .10.1.3 10.1.3 文件的分类文件的分类根据数据的组织形式,数据文件可分为根
3、据数据的组织形式,数据文件可分为ASCII文件文件和二进制文件。和二进制文件。 ASCIIASCII文件文件( (文本文件文本文件):):每一个字节放一个每一个字节放一个ASCIIASCII代码代码二进制文件二进制文件: :把内存中的数据按其在内存中的存储形把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放式原样输出到磁盘上存放. .例:例:整数整数1000010000在内存中的存储形式以及分别按在内存中的存储形式以及分别按ASCIIASCII码形式和二进制形式输出如下图所示:码形式和二进制形式输出如下图所示:10.1 C10.1 C文件的有关概念文件的有关概念 10.1.2 文件名一个
4、文件要有一个惟一的文件标识,以便用户识别和引用。文件标识包括三部分:(1)文件路径:(2)文件名主干;(3)文件后缀。文件路径表示文件在外部存储设备中的位置。 如: d: cc temp file1 . dat 文件路径 文件名主干 文件后缀注意: 文件标识被称为文件名,但此时的文件名包括以上三部分内容,而不仅是文件名主干。文件名主干的命名规则遵循标识符的命名规则。后缀用来表示文件的性质,一般不超过3个字母.如:.doc (Word 生成的文件),.txt (文本文件),.dat (数据文件) 10.1 C10.1 C文件的有关概念文件的有关概念10.1.3 10.1.3 文件的分类文件的分类
5、ASCIIASCII文件和二进制文件的比较:文件和二进制文件的比较:ASCIIASCII文件文件便于对字符进行逐个处理,也便于输出便于对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转换时字符。但一般占存储空间较多,而且要花费转换时间。间。二进制文件二进制文件可以节省外存空间和转换时间,但一个可以节省外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。字节并不对应一个字符,不能直接输出字符形式。10.1 C10.1 C文件的有关概念文件的有关概念 10.1.5 文件指针文件型指针变量文件型指针变量: :FILE FILE * *fpfp;fpfp是一个指向
6、是一个指向FILEFILE类型结构体类型结构体( (文件名文件名, ,状态状态, ,当前位置当前位置) )的指针变量。的指针变量。可以使可以使fpfp指向某一个文件的结构体变量,从而通过该结构体指向某一个文件的结构体变量,从而通过该结构体变量中的文件信息能够访问该文件。变量中的文件信息能够访问该文件。文件内部指针文件内部指针: :P171 P171 用以指示文件内部当前位置的指针用以指示文件内部当前位置的指针. .10.2.110.2.1文件的打开文件的打开(fopen(fopen函数函数) )函数调用函数调用: :FILE FILE * *fpfp;fpfpfopenfopen(文件名文件名
7、,使用文件方式使用文件方式););需要打开的文件名,也就是准备访问的文件的名字;需要打开的文件名,也就是准备访问的文件的名字;使用文件的方式(使用文件的方式(“读读”还是还是“写写”等);等);返回文件指针返回文件指针, ,若成功若成功, ,则指向被打开的文件则指向被打开的文件, ,若不成功若不成功则返回则返回NULLNULLFILE FILE * *fp1,fp1,* *fp2;fp2;fp1=fopen(fp1=fopen(“1.txt1.txt”, ,”r r”);); fp2=fopen(“c:2.txt”,”wr”);10.2 10.2 文件的打开与关闭文件的打开与关闭 10.2.1
8、 文件的打开(fopen函数)文件使用方式含文件使用方式含 义义 “r r” ( (只读只读) )为为输入输入打开一个打开一个文本文本文件文件“w w” ( (只写只写) )为为输出输出打开或建立一个打开或建立一个文本文本文件文件“a a” ( (追加追加) )向向文本文本文件尾增加数据文件尾增加数据“rbrb” ( (只读只读) )为为输入输入打开或建立一个打开或建立一个二进制二进制文件文件“wbwb” ( (只写只写) )为为输出输出打开一个打开一个二进制二进制文件文件abab“ ( (追加追加) )向向二进制二进制文件尾增加数据文件尾增加数据rt+rt+“ ( (读写读写) )为为读读/
9、 /写写打开一个打开一个文本文本文件文件wt+wt+” ( (读写读写) )为为读读/ /写建立写建立一个新的一个新的文本文本文件文件at+at+” ( (读写读写) )为读为读/ /写打开一个文本文件写打开一个文本文件rb+rb+“ ( (读写读写) )为读为读/ /写打开一个写打开一个二进制二进制文件文件“wb+wb+“ ( (读写读写) )为读为读/ /写打开或写打开或建立建立一个新的一个新的二进制二进制文件文件“ab+ab+” ( (读写读写) )为读为读/ /写打开一个写打开一个二进制二进制文件文件10.2 10.2 文件的打开与关闭文件的打开与关闭 10.2.2 文件的关闭(fcl
10、ose函数)函数调用函数调用: :fclosefclose(文件指针文件指针););函数功能函数功能: : 使文件指针变量不指向该文件,也就是文件指针变使文件指针变量不指向该文件,也就是文件指针变量与文件量与文件“脱钩脱钩”,此后不能再通过该指针对原来与,此后不能再通过该指针对原来与其相联系的文件进行读写操作其相联系的文件进行读写操作 返回值返回值: :关闭成功返回值为关闭成功返回值为;否则返回;否则返回EOF,EOF,其值为其值为-1-1FILE FILE * *fp;fp;Fp=fopen(Fp=fopen(“1.txt1.txt”, ,”r r”););Fclose(fp); Fclos
11、e(fp); 10.3 10.3 文件的顺序读写文件的顺序读写 10.3.1 向文件读写一个字符2.2.fgetc函数从文件读入一个字符函数从文件读入一个字符. .调用形式调用形式: : ch chfgetc(fp)fgetc(fp); 函数功能函数功能: : fgetcfgetc函数带回一个字符,赋给函数带回一个字符,赋给chch。使用。使用fgetcfgetc后后, ,该位置该位置文件内部指针向后移动一个字节。文件内部指针向后移动一个字节。 注意:注意:1 1 在在fgetc fgetc 函数调用时,函数调用时,读取的文件必须是以读方式或者读取的文件必须是以读方式或者读写方式打开的文本文件
12、。读写方式打开的文本文件。2 2 返回类型为返回类型为intint类型类型3 3 区分文件指针和文件内部指针区分文件指针和文件内部指针 文件指针:指向整个文件,需在程序中定义文件指针:指向整个文件,需在程序中定义文件内部指针:指示文件内部当前读写位置,每读写一次文件内部指针:指示文件内部当前读写位置,每读写一次该指针均向后移动,它不需要在程序中定义说明,而是由该指针均向后移动,它不需要在程序中定义说明,而是由系统自动设置。系统自动设置。10.3 10.3 文件的顺序读写文件的顺序读写 10.3.1 向文件读写一个字符1.1.用用fputcfputc函数向文件写入一个字符函数向文件写入一个字符.
13、 . 调用形式调用形式: : fputc ( ch fputc ( ch,fp ) fp ) ; 函数功能函数功能: : 将字符(将字符(chch的值)输出到的值)输出到fpfp所指向的文件中去。所指向的文件中去。 返回值返回值: :如果输出成功,则返回值就是输出的字符如果输出成功,则返回值就是输出的字符( (用整型表示用整型表示) );如果输出失败,则返回一个如果输出失败,则返回一个EOF.EOF.Fputc(Fputc(a a,f);/,f);/被写入的文件可以用写、读写、追加方式打开被写入的文件可以用写、读写、追加方式打开/每写入一个字符,文件内部的位置指针向后一个字节每写入一个字符,文
14、件内部的位置指针向后一个字节3. 读写字符举例读写字符举例p171例例0.1 读文件读文件1.txt并在屏幕上输出文件内容并在屏幕上输出文件内容#include #include void main( ) FILE *fp; int ch; fp=fopen(c:1.txt, rt); if (fp=NULL) printf(cannot open filen); exit(0); /*终止程序终止程序*/ ch=fgetc(fp ); while(ch!=EOF) putchar(ch); ch=fgetc(fp); fclose(fp); #include #include void ma
15、in( ) FILE *fp; int ch; fp=fopen(c:1.txt, w+); if (fp=NULL) printf(cannot open filen); exit(0); /*终止程序终止程序*/ printf(input a string:n); while(ch=getchar()!=n) fputc(ch,fp); fclose(fp); 思考:如何从键盘输入字符追加到文件末尾。思考:如何从键盘输入字符追加到文件末尾。10.3 10.3 文件的顺序读写文件的顺序读写 10.3.2 向文件读写一个字符串fgetsfgets函数函数 字符指针字符指针 fgets(char
16、 str, int n, FILE *fp);函数功能函数功能: : 从指定的文件读入一个字符串到数组中从指定的文件读入一个字符串到数组中, ,n n表示从文件中表示从文件中读出的字符串不超过读出的字符串不超过n-1n-1个字符个字符,在读入的最后一个字符在读入的最后一个字符串后加上串结束标志串后加上串结束标志00. .返回值返回值: :若执行若执行fgetsfgets函数成功,函数成功,则返回值为则返回值为strstr数组首元素的地数组首元素的地址址如果遇到文件尾或换行符,则返回如果遇到文件尾或换行符,则返回NULLNULL。Fgets(str,n,f)/Fgets(str,n,f)/从从f
17、 f中读入中读入n-1n-1个字符送入字符串数组个字符送入字符串数组StrStr中中. .L9-3 从从1.txt中读取一个字符串中读取一个字符串#include #include void main( ) FILE *fp; char s5; fp=fopen(c:1.txt, rt); if (fp=NULL) printf(cannot open filen); exit(0); /*终止程序终止程序*/ fgets(s,5,fp); printf(%sn,s); fclose(fp);10.3 10.3 文件的顺序读写文件的顺序读写 10.3.2 向文件读写一个字符串fputsfput
18、s函数函数函数原形函数原形int fputs(字符串字符串,文件指针文件指针);函数功能函数功能: : 用用fputsfputs函数可以向指定的文件写入一个字符串函数可以向指定的文件写入一个字符串. .例:例: fputs(fputs(“abcdabcd”,f);,f);注:注:fputsfputs函数把字符串的内容写入一个文件中,字符函数把字符串的内容写入一个文件中,字符串尾部的串尾部的00不输出不输出输出成功时返回输出成功时返回0,0,否则返回否则返回EOFEOFL9-4 1.txt追加一个字符串追加一个字符串#include #include void main( ) FILE *fp;
19、 char s5; fp=fopen(c:1.txt, at); if (fp=NULL) printf(cannot open filen); exit(0); /*终止程序终止程序*/ scanf(%s,s); fputs(s,fp); fclose(fp);10.3 10.3 文件的顺序读写文件的顺序读写 10.3.4向文件读写一组数据数据块读写函数数据块读写函数(fread()(fread()和和fwrite()fwrite()函数调用函数调用: :fread (buffer,size,countfread (buffer,size,count,fp);fp);fwrite(buffe
20、r,size,count,fp); fwrite(buffer,size,count,fp); 参数说明:参数说明:bufferbuffer:是一个指针。:是一个指针。对对fread fread 来说,它是来说,它是从文件中从文件中读读出出数据的存放地址。数据的存放地址。对对fwritefwrite来说,是要输出来说,是要输出到文件中的到文件中的数据的数据的起始地址起始地址sizesize: 要读写的字节数。要读写的字节数。countcount: 要进行读写多少个要进行读写多少个sizesize字节的数据项。字节的数据项。fpfp: 文件型指针。文件型指针。10.3 10.3 文件的顺序读写文
21、件的顺序读写 10.3.4 向文件读写一组数据 使用举例:使用举例: 若若文件以二进制文件以二进制形式打开:形式打开: fread(f,4,2,fp);fread(f,4,2,fp); 此函数从此函数从fpfp所指向的文件中读入所指向的文件中读入2 2个个4 4个字节的数个字节的数 据,存储到数组据,存储到数组f f中。中。 P176 L9.5从键盘输入两个学生数据从键盘输入两个学生数据,写入一个文件中写入一个文件中,再再从文件中读出这两个学生的数据显示在屏幕上从文件中读出这两个学生的数据显示在屏幕上#include #include struct st char name10; int nu
22、m; int age; stu12,stu22,*p,*q;void main( ) FILE *fp; int i;p=stu1;q=stu2;fp=fopen(c:1.txt,wb+);if (fp=NULL) printf(cannot open filen); exit(0); /*终止程序终止程序*/ printf(n input datan);for(i=0;iname,&p-num,&p-age);p=stu1;fwrite(p,sizeof(struct st),2,fp); rewind(fp); fread(q,sizeof(struct st),2,fp)
23、; for (i=0;iname,q-num,q-age); fclose(fp);P176 L9.5从键盘输入两个学生数据从键盘输入两个学生数据,写入一个文件中写入一个文件中,再从文再从文件中读出这两个学生的数据显示在屏幕上件中读出这两个学生的数据显示在屏幕上 格式化读写格式化读写 Fscanf(文件指针文件指针,格式字符串格式字符串,输入列表输入列表) Fprintf(文件指针文件指针,格式字符串格式字符串,输出列表输出列表) Fscanf(fp,”%d%s”,&i,s); Fprintf(fp,”%d%c”,j,ch);10.3 10.3 文件的顺序读写文件的顺序读写 10.3.
24、3 向文件进行格式化读写函数调用函数调用: :fprintf ( fprintf ( 文件指针,格式字符串,输出表列);文件指针,格式字符串,输出表列);fscanf ( fscanf ( 文件指针,格式字符串,输入表列);文件指针,格式字符串,输入表列); 函数功能函数功能: : 从磁盘文件中读入或输出字符。从磁盘文件中读入或输出字符。 例:例:fprintf(fp,fprintf(fp,”%d,%6.2f%d,%6.2f”,i,t);,i,t);Fscanf (fp,Fscanf (fp,”%d,%f%d,%f”,&i,&t);,&i,&t);从键盘输入两个
25、学生数据从键盘输入两个学生数据,写入一个文件中写入一个文件中,再从文件中读出这两个再从文件中读出这两个学生的数据显示在屏幕上学生的数据显示在屏幕上void main( ) FILE *fp; int i;p=stu1;q=stu2;fp=fopen(c:2,wb+);if (fp=NULL) printf(cannot open filen); exit(1); /*终止程序终止程序*/ printf(n input datan);for(i=0;iname,&p-num,&p-age);p=stu1; /fwrite()for (i=0;iname,p-num,p-age);
26、rewind(fp);/freadfor(i=0;iname,&q-num,&q-age); printf(n n nametnumbertage); q=stu2; for (i=0;iname,q-num,q-age); fclose(fp);10.4 10.4 文件的随机读写文件的随机读写顺序读写和随机读写顺序读写和随机读写顺序读写:顺序读写:位置指针按字节位置顺序移动。位置指针按字节位置顺序移动。随机读写:随机读写:读写完上一个字符(字节)后,并不一定要读写其后续读写完上一个字符(字节)后,并不一定要读写其后续的字符(字节),而可以读些文件中任意位置上所需要的字符(字节
27、),而可以读些文件中任意位置上所需要的字符(字节)。的字符(字节)。10.4.1 10.4.1 文件位置指针的定位文件位置指针的定位C C语言提供以下有关函数使位置指针指向指定的位置语言提供以下有关函数使位置指针指向指定的位置: :(1)rewind(1)rewind函数函数函数功能函数功能: :是使位置指针重新返回文件的开头,此函数没有返回值是使位置指针重新返回文件的开头,此函数没有返回值。 (2)fseek(2)fseek函数函数函数功能:函数功能:改变文件的位置指针改变文件的位置指针函数调用形式:函数调用形式:fseek(fseek(文件类型指针,位移量,起始点文件类型指针,位移量,起始
28、点) )起始点:文件开头起始点:文件开头 SEEK_SET 0SEEK_SET 0 文件当前位置文件当前位置 SEEK_CUR 1SEEK_CUR 1 文件末尾文件末尾 SEEK_END 2SEEK_END 2位移量:以起始点为基点,向前移动的字节数。一般位移量:以起始点为基点,向前移动的字节数。一般 要求为要求为longlong型型 10.4.1 文件位置指针的定位fseekfseek函数应用举例函数应用举例: :fseek(fpfseek(fp,100L100L,);,);将位置指针移到离文件头将位置指针移到离文件头100100个字节处个字节处fseek(fpfseek(fp,50L50L, ););将位置指针移到离当前位置将位置指针移到离当前位置5050个字节处个字节处fseek(fpfseek(fp,50L50L, ););将位置指针从文件末尾处向后退将位置指针从文件末尾处向后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024样板间装修工程保险合同
- 2024年股份转移细则与股权转让协议版B版
- 2024年高级餐厅服务员合同
- 2024年版教育培训合作协议
- 设备与保障措施计划
- 2024年网络游戏开发运营合同
- 护肤美白销售工作总结
- 食品饮料行业工程师工作总结
- 2024年高端制造业用挤塑板购销合同
- 2024年离婚合同书:夫妻共同财产分割指南版B版
- 贴面 贴面修复
- 2023年高二学业水平测试生物模拟考试试题
- 力士乐-mtx micro简明安装调试手册v4updated
- GB/T 6807-2001钢铁工件涂装前磷化处理技术条件
- GB/T 15109-1994白酒工业术语
- 膜片钳常见问题汇总(人人都会膜片钳)
- 校车安全逃生技能培训学习
- (新版)电网规划专业知识考试题库(含答案)
- 学校心理危机干预流程图
- 杏酱生产工艺
- 融资担保业务风险分类管理办法
评论
0/150
提交评论