gjh课件ch10文件

上传人:E**** 文档编号:90588081 上传时间:2019-06-13 格式:PPT 页数:24 大小:197KB
返回 下载 相关 举报
gjh课件ch10文件_第1页
第1页 / 共24页
gjh课件ch10文件_第2页
第2页 / 共24页
gjh课件ch10文件_第3页
第3页 / 共24页
gjh课件ch10文件_第4页
第4页 / 共24页
gjh课件ch10文件_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《gjh课件ch10文件》由会员分享,可在线阅读,更多相关《gjh课件ch10文件(24页珍藏版)》请在金锄头文库上搜索。

1、第十章 文件,文件的引入,#include void main() int i,j,m505,s; for(i=0;i50;i+) printf(“请输入第%d个学生的成绩:n“,i+1); s=0; for(j=0;j4;j+) scanf(“%d“, ,程序的特点:输入数据量大 可能出现的问题: 部分输入错,重新运行程序 如何保证输入数据快捷、正确: 使用文件 如何保存处理结果: 使用文件,对50个学生4门课程成绩,求每个学生的平均分。,什么是文件,文件: 一般指存储在外部介质(如磁盘)上数据的集合。 操作系统是以文件为单位对数据进行管理的. 一个文件要有一个惟一的文件标识,以便用户识 别

2、和引用。文件标识包括三部分: (1)文件路径:(2)文件主名;(3)文件扩展名。 文件路径表示文件在外部存储设备中的位置。 如: d: cc temp file1 . dat 文件路径 文件主名 文件扩展名,文件的分类,根据数据的编码方式分: ASCII文件(文本文件): 每一个字节放一个ASCII代码 二进制文件: 把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放. 例:整数10000在内存中的存储形式以及分别按ASCII 码形式和二进制形式输出如下图所示:,ASCII文件和二进制文件的比较: ASCII文件 便于对字符进行逐个处理,也便于输出字符。但一般占存储空间较多,而且要花费转

3、换时间。 二进制文件 可以节省外存空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。 C系统在处理这些文件时,并不区分类型,都看成是字节流,按字节进行处理,称作“流式文件”。,根据数据的存取方式分: 顺序文件: 访问每一个数据只能从头开始访问,直到要访问的数据为止。 随机文件: 可以随机访问其中的任一个数据。,如何在程序中表示文件?,文件信息: 文件名、文件状态、文件当前位置等 文件类型: 根据文件信息定义的结构体类型 类型名:FILE 定义文件指针: 指向某个文件结构体变量的指针; 用fopen函数打开一个文件,并让指针指向该文件; 通过文件指针可以访问其指向的文件。,例如:

4、 FILE *fp;,typedef struct int _fd; /* 文件位置指针,即当前文件的读写位置 */ int _cleft; /* 文件缓冲区中剩余的字节数 */ int _mode; /* 文件操作模式 */ char *nextc; /* 用于文件读写的下一个字符位置 */ char *_buff; /* 文件缓冲区位置(指针) */ FILE;,一个文件指针代表了一个文件,文件的打开与关闭,文件的打开:fopen()函数 FILE *fp; fpfopen(文件名,使用文件方式); 文件名:准备访问的文件的名字; 使用文件的方式:“读”还是“写”等; 为该文件建立缓冲区;

5、 让哪一个指针变量指向被打开的文件。 如果打开文件出现错误,返回值为“NULL”(NULL在stdio.h文件中已被定义为0);否则,返回该文件对应结构体信息的首地址。,文件的输入、输出过程,缓冲文件系统: 系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。从内存向文件输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到文件去。从文件读数据必须先将数据送到缓冲区,再从缓冲区读入程序。,文件的打开与关闭,文件的打开方式:,文件使用方式 含 义 “ r “ (只读)为输入打开一个文本文件 “ w “ (只写)为输出打开一个文本文件 “ a “ (追加)向文本文件尾增加数据 “ rb “

6、(只读)为输入打开一个二进制文件 “ wb “ (只写)为输出打开一个二进制文件 “ ab “ (追加)向二进制文件尾增加数据 “ r+ ” (读写)为读/写打开一个已存在的文本文件 “ w+ “ (读写)为读/写建立一个新的文本文件 “ a+ ” (读写)为读/追加打开一个文本文件 “ rb+ “ (读写)为读/写打开一个二进制文件 “ wb+ “ (读写)为读/写建立一个新的二进制文件 “ ab+ ” (读写)为读/追加打开一个二进制文件,文件的打开与关闭,关闭文件 fclose(文件指针); 函数功能: 处理缓冲区数据,释放缓冲区空间; 使文件指针变量不再指向该文件。 返回值: 关闭成功

7、返回值为;否则返回EOF(-1) 。,C语言把那些标准的输入输出设备也当作文件来处理,如: stdin 标准输入文件(键盘) stdout 标准输出文件(显示器) 对这些文件系统会自动打开和关闭。,文件的顺序读写,向文件读写字符 1) ch = fgetc ( fp ); 从fp所指向文件当前位置读取单个字符,赋给变量ch。 如果在执行fgetc函数读字符时遇到文件结束符,函数返回一个文件结束标志EOF(即-1)。 2) fputc(ch,fp ); 将ch中的字符写到fp所指向文件的当前位置。 如果输出成功,则返回值就是输出的字符; 如果输出失败,则返回一个EOF (即-1)。,FILE *

8、fp; int i; char ch; if(fp=fopen(“c:char.txt“,“w“)=NULL) printf(“File can not open!n“); exit(0); for(i=0;i6;i+) ch=getchar(); fputc(ch,fp); fputc(n,fp); fclose(fp);,if(fp=fopen(“c:char.txt“,“r“)=NULL) printf(“File can not open!n“); exit(0); for(i=0;i8;i+) ch=fgetc(fp); putchar(ch); fclose(fp);,例1: 从键

9、盘输入6个字符写入c盘根下名为”char.txt”的文本文件中,以每行一个字符的形式,并且读取前4个字符输出到屏幕上。,#include #include void main() FILE *fp; char ch,filename10; scanf(“%s“,filename); if(fp=fopen(filename,“w“)=NULL) printf(“无法打开此文件n“); exit(0); ,ch=getchar( ); ch=getchar( ); while(ch!=#) fputc(ch,fp); ch=getchar(); fclose(fp); putchar(10);

10、,例2: 从键盘输入一段文本(以输入“#”表示结束),写入指定文件中。,文件的默认位置为 bin目录,输出该文件内容: if(fp=fopen(filename,“r“)=NULL) printf(“无法打开此文件n“); exit(0); while( ! feof(fp) ) ch=fgetc(fp); putchar(ch); fclose(fp);,算法分析: 从文件1中读一个字符,将其写到文件2中,直到遇到文件1的文件结束标记为止。 使用两个文件指针,利用循环读一个写一个。,例3: 字符文件的复制。将上例创建的字符文件1复制到字符文件2中。,#include #include voi

11、d main( ) FILE *in,*out; char ch,infile10,outfile10; scanf(“%s“,infile); scanf(“%s“,outfile); if(in=fopen(infile,“r“)=NULL) printf(“无法打开此文件n“); exit(0); if(out=fopen(outfile,“w“)=NULL) printf(“无法打开此文件n“); exit(0);,while(!feof(in) ch=fgetc(in); fputc(ch,out); putchar(ch); putchar(10); fclose(in); fcl

12、ose(out); ,作业,无,文件的顺序读写,文件的格式化读写 1) 输出:fprintf ( 文件指针,格式字符串,输出表列); 2) 输入:fscanf ( 文件指针,格式字符串,输入表列); 函数功能: 从磁盘文件中读入程序或从程序输出字符到文件。 例: fprintf(fp,”%d,%6.2f”,i,t); fscanf(fp,”%d,%f”,文件的顺序读写,#include #include void main() FILE *fp; int i,j; char filename10; scanf(“%s“,filename); if(fp=fopen(filename,“w“)=

13、NULL) printf(“无法打开此文件n“); exit(0); for(i=1;i=9;i+) for(j=1;j=i;j+) printf(“%d*%d=%-5d“,j,i,j*i); printf(“n“); for(j=1;j=i;j+) fprintf(fp,“%d*%d=%-5d“,j,i,j*i); fprintf(fp,“n“); fclose(fp); ,什么功能?,文件的顺序读写,#include #include void main() FILE *fp;int i,j,m105,s; char filename10; scanf(“%s“,filename); if

14、(fp=fopen(filename,“r“)=NULL) printf(“无法打开此文件n“); exit(0); for(i=0;i10;i+) s=0; for(j=0;j4;j+) fscanf(fp,“%d“, ,数据文件: 77 55 77 88 99 88 77 66 66 77 88 99 88 77 66 67 87 98 67 88 76 87 85 63 78 65 83 72 71 86 93 68 67 98 91 74 62 67 84 85,文件的随机读写,文件的位置指针 用来指示当前的读写位置。 一般情况下,在对字符文件进行顺序读写时,文件的位置指针指向文件开头

15、,这时如果对文件进行读的操作,就读第一个字符,然后文件的位置指针顺序向后移一个位置,在下一次执行读的操作时,就将指针指向的第二个字符读入。依此类推,直到遇文件尾.,文件的随机读写,文件位置指针的定位: (1)rewind函数 使位置指针重新返回文件的开头。 调用形式:rewind(文件指针) (2)fseek函数 改变文件的位置指针 函数调用形式: fseek(文件类型指针,位移量,起始点) 起始点:文件开头 SEEK_SET 0 文件当前位置 SEEK_CUR 1 文件末尾 SEEK_END 2 位移量:以起始点为基点,向前移动的字节数。,fseek函数应用举例: fseek(fp,100L,0); 将位置指针移到离文件头100个字节处 fseek(fp,50L, 1); 将位置指针移到离当前位置50个字节处 fseek(fp,50L, 2); 将位置指针从文件末尾处向后退50个字节,文件的随机读写,(3)ftell函数 函数功能: 得到流式文件中的当前位置,用相对于文件开头的位移量来表示。 返回值: 返回当前位置,出错时返回-1L。 应用举例: i = ftell(fp); if(i=-1L) printf(

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号