版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第九章 文件,主要内容: 9.1 文件的概念 9.2 文件类型指针 9.3 文件的打开和关闭 9.4 文件的读写 9.5 文件的定位,2,9.1 文件的概念,文件:存储在外部介质(如:软盘、硬盘、光盘等)上的数据的集合。文件又是以文件名作为标识符。 文件的意义 数据的输入和输出:在计算机中,数据的输入和输出都是相对内存而言。 输入:将数据从输入设备或磁盘文件读入内存称为输入 输出从内存写到输出设备或磁盘文件称为输出,3,文件的组织形式,两种组织形式 ASCII形式(文本形式):每一个字节放一个ASCII代码,代表一个字符 二进制形式:把数据按其在内存中的存储形式原样输出到磁盘上存放,如:整
2、数1000,在二进制文件中:按补码存储,占2个字节,分别为: 00000011 11101000 (1000D= 00000011 11101000B),在文本文件中:4个字符占4个字节存储,分别为: 00110001 00110000 00110000 00110000 (1、0 的ASCII码值分别为49、48),4,9.2 指向文件的指针,指向文件的指针变量的定义: FILE *变量名; 如:FILE *fp; 则定义了指针变量fp是一个指向文件的指针。 注意: 类型FILE定义在头文件stdio.h中,因此使用FILE须 #include ,5,9.3 文件的打开和关闭,文件使用前,应
3、先将文件打开到内存中的文件缓冲区,使用之后应将文件关闭,即把文件缓冲区中的数据回存到文件,然后释放文件缓冲区。 打开文件的函数:fopen()函数关闭文件的函数:fclose()函数,6,一、文件的打开,方法: FILE *fp;fp=fopen(文件名,打开方式); 功能:fopen()函数将指定文件以指定方式打开在文件缓冲区,返回缓冲区的首地址并赋给fp,于是fp指向所打开的文件。,文件打开举例: fp=fopen(E:datatest.dat ,w);表示将E盘data目录下的test.dat文件,按w方式打开。,文件名可包含路径,但需用表示,7,文件的打开,文件的打开方式: r: 文本
4、文件只读w: 文本文件只写a: 文本文件追加rb/wb/ab: 二进制文件只读/只写/追加r+/w+: 文本文件可读可写 a+: 文本文件可追加可读 rb+/wb+: 二进制文件可读可写 ab+: 二进制文件可追加可读,8,文件的打开,文件中位置指针的概念: 在文件内部有一个位置指针指向文件的当前读写位置。以非“追加”方式打开文件时,位置指针指向文件首,并随着对文件的读写而自动移动指向下一个读写位置。,注意:文件中的位置指针不同于文件指针 文件指针须在程序中定义,只要不重新赋值,其值是不变的。 文件中的位置指针用以指示文件内部的当前读写位置,每读写一次,该指针均向后移动,它无需定义,而是由系统
5、自动设置的。,9,文件的打开,文件打开常用程序段举例:if(fp=fopen(aa, r)=NULL) printf(cannot open this filen); exit(0); /*关闭所有文件,终止正在调用的过程*/ ,10,二、文件的关闭,方法: fclose(文件指针);例如:fclose(fp);功能:将指针fp指向的文件关闭。所谓文件关闭就是文件指针与文件的指向关系中断。,11,文件的读写步骤:,9.4 文件的读写,12,文件的读写,文件的读写函数: fgetc( )和fputc( ):读写一个字符 fgets( )和fputs( ):读写一个字符串 fscanf( )和fp
6、rintf( ):格式化读写一组数据 fread( )和fwrite( ):读写一个数据块,13,用于读写文本/二进制文件中的一个字符。 1、读字符函数:fgetc(文件指针) 功能: 从“文件指针”所指文件中读出一个字符,一、字符读写函数,2、写字符函数:fputc(字符,文件指针) 功能: 将指定字符写入“文件指针”所指文件中,14,字符读写函数,ch=fgetc(stdin); 等价于:ch=getchar( ); fputc(ch,stdout); 等价于:putchar(ch);,代表键盘,代表显示器,15,例1 从键盘上输入一行字符写入data1.dat中,遇#结束,#includ
7、e stdio.h void main( ) FILE *fp; char ch; fp=fopen(data1.dat,w); ch=getchar( ); while(ch!=#) fputc(ch,fp); putchar(ch); ch=getchar( ); fclose(fp); ,if(fp=fopen(data1.dat,w)=NULL) printf(cannot open this filen); exit(0);,例13.1,16,例2 将一个文件中的信息复制到另一个文件中,#include “stdio.h” void main( ) FILE * in,*out; c
8、har infile10,outfile10; printf(输入原有文件名:n); scanf(%s, infile); printf(输入新复制的文件名:n ); scanf(%s, outfile); in=fopen(infile, r); out=fopen(outfile, w); while( !feof(in) ) fputc(fgetc(in),out); fclose(in); fclose(out); ,例13.2,用feof函数判断文件是否结束,返回值为1(文件结束)或0(文件未结束)。 既适用于读文本文件,也适用于读二进制文件,17,例2 将一个文件中的信息复制到另一
9、个文件中(另解),#include “stdio.h” void main( ) FILE * in,*out; char ch,infile10,outfile10; printf(输入原有文件名:n); scanf(%s, infile); printf(输入新复制的文件名:n ); scanf(%s, outfile); in=fopen(infile, r); out=fopen(outfile, w); while( (ch=fgetc(in)!=EOF ) fputc(ch,out); fclose(in); fclose(out); ,用定义在stdio.h中的符号常量EOF(-
10、1)判断文件是否结束 只适用于读文本文件,18,二、字符串读写函数 P344,用于读写文本/二进制文件中的一个字符串。 1、读字符串函数 fgets(字符数组地址, n, 文件指针); 功能: 从“文件指针”所指文件中读出n-1个字符,加上0后存入字符数组。若在读出n-1个字符之前遇到了换行符或文件结束,则读出结束。,2、写字符串函数 fputs(字符串首地址,文件指针); 功能:将字符串写入“文件指针”所指文件中,自动舍弃串结束标志0 。,19,例3 将string文件中的字符串(含10个字符)输出到屏幕,#include void main() FILE *fp; char str11;
11、if(fp=fopen(string,rb)=NULL) printf(nCannot open file strike any key exit!); getchar(); exit(1); fgets(str,11,fp); printf(n%sn,str); fclose(fp); ,20,三、数据块读写函数,一般用于二进制文件的读写,将文件中的一块或多块数据读到一个变量或一个数组中,或将一个变量或一个数组的内容写到文件中。,存放数据块的变量或数组地址,文件指针,数据块的大小,数据块的个数,1、读数据块函数:fread( p, size, n, fp ) 2、写数据块函数:fwrite(
12、 p, size, n, fp ),返回值:实际读写的数据块个数。,21,例13.3 #include stdio.h #define N 4 struct student char name10; int num; int age; stuN; /*定义全局 结构体数组stu*/,/*主函数*/ void main() void save (),print(); int i; for(i=0;iN;i+) scanf(%s%d%d, , ,例4 从键盘上输入4个学生的数据到文件,再从文件输出,从键盘到数组,22,/*建立二进制文件函数:每次写入一个结构体数据块*/ /*假设
13、N个学生数据已存放在全局结构体数组stu中*/ void save () FILE *fp; int i; if (fp=fopen(stu_list,wb)=NULL) printf(Cannot open outfile!n); return; for(i=0;iN;i+) fwrite( ,if(fwrite(,例4 从键盘上输入4个学生的数据到文件,再从文件输出(续),从数组到文件,23,/*输出二进制文件内容函数:每次读出一个结构体数据块*/ void print () FILE *fp; struct student stu2N; int i; if (fp=fopen(stu_l
14、ist,rb)=NULL) printf(Cannot open infile!n); return; for(i=0;iN;i+) if (fread( ,例4 从键盘上输入4个学生的数据到文件,再从文件输出(续),从文件到数组,从数组到屏幕,24,四、格式化读写函数,一般用于文本文件的格式化读写。 1、格式化读函数: fscanf(文件指针,格式字符串,输入项地址表列); 功能:从“文件指针”所指文件中,按格式字符串指定的格式读出若干数据项作为指定输入项的值。,fscanf(stdin,格式字符串,输入项地址表列); 等价于:scanf(格式字符串,输入项地址表列);,25,格式化读写函数
15、,fprintf(stdout,格式字符串,输出项表列); 等价于:printf(格式字符串,输出项表列);,2、格式化写函数: fprintf(文件指针,格式字符串,输出项表列); 功能:将指定输出项的值按格式字符串指定的格式,写入到“文件指针”所指文件中。,26,/*建立文本文件函数*/ /*假设N个学生数据已存放在全局结构体数组stu中*/ void save () FILE *fp; int i; if (fp=fopen(stu_list2,w)=NULL) printf(Cannot open outfile!n); return; for(i=0;iN;i+) fprintf(f
16、p,%s %d %dn, , stui.num, stui.age); fclose(fp); ,例4 从键盘上输入4个学生的数据到文件,再从文件输出(另解),从数组到文件,27,/*输出文本文件内容函数*/ void print() FILE *fp; struct student stu2N; int i; if (fp=fopen(stu_list2,r)=NULL) printf(Cannot open infile!n); return; for(i=0;iN;i+) fscanf(fp,%s %d %d, , ,例4 从键盘上输入4个学生的数据
17、到文件,再从文件输出(另解,续),从文件到数组,从数组到屏幕,28,文件的读写函数小结,常用读写函数: fgetc( )和fputc( ):读写一个字符 fgets( )和fputs( ):读写一个字符串 fscanf( )和fprintf( ):格式化读写一组数据 其它读写函数: fread( )和fwrite( ):读写一个数据块,注意: 为保证写入文件的数据被正确读出, 用fprintf( )建立的数值文件,应用fscanf( )读取; 同理,用fwrite( )建立的数值文件,应用fread( )读取。 用fscanf( )读数据的格式,应与用fprintf( )写数据时的格式对应。,
18、29,9.5 文件的定位,文件中的位置指针指向当前的读写位置,每进行一次读写操作,位置指针就会自动指向下一个位置。 如果想改变这种规律,就需要强制地使文件指针指向特定的位置,需要使用相应的函数来实现。,30,一、rewind()函数,调用格式: rewind(文件指针) 功能:使“文件指针”所指文件的位置指针重新返回文件的开头。 返回值:无,31,例5 先将文件file1.c的内容显示在屏幕上再写入文件file2.c中,#include “stdio.h” main( ) FILE *fp1,*fp2; fp1=fopen(file1.c, r); fp2=fopen(file2.c, w); while( !feof(fp1) ) putchar(fgetc(fp1); rewind(fp1); while( !feof(fp1) ) fputc(f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 测井绘解工诚信品质测试考核试卷含答案
- 锻件切边工操作管理竞赛考核试卷含答案
- 2026年仿生材料(仿生皮肤骨骼)项目可行性研究报告
- 2026年智能煎蛋器项目公司成立分析报告
- 2026年创新CROCDMO服务项目可行性研究报告
- 2026年供热管网节能改造项目公司成立分析报告
- 2026年垂直大模型项目可行性研究报告
- 七台河市新兴区法院系统招聘考试真题2025
- 2026年云计算平台升级改造合同
- 2026年环境影响评价工程师考试题库含环境监测
- 2026四川凉山州雷波县粮油贸易总公司面向社会招聘6人考试参考题库及答案解析
- 2024-2025学年广东省广州市越秀区九年级上学期期末数学试卷(含答案)
- 2026北京海淀初二上学期期末英语试卷和答案
- 多进制LDPC码编译码算法:从理论到硬件实现的深度剖析
- 2025年医院财务部工作总结及2026年工作计划
- 基于新课程标准的小学数学“教学评一致性”实践与研究课题开题报告
- 2026省考广西试题及答案
- 中国临床肿瘤学会(csco)乳腺癌诊疗指南2025
- 2025年(第十二届)输电技术大会:基于可重构智能表面(RIS)天线的相控阵无线通信技术及其在新型电力系统的应用
- 带压开仓培训课件
- 护理儿科中医题库及答案解析
评论
0/150
提交评论