C语言程序设计教程(第4版)_第10章_文件

上传人:飞*** 文档编号:33927163 上传时间:2018-02-19 格式:PPTX 页数:19 大小:392.04KB
返回 下载 相关 举报
C语言程序设计教程(第4版)_第10章_文件_第1页
第1页 / 共19页
C语言程序设计教程(第4版)_第10章_文件_第2页
第2页 / 共19页
C语言程序设计教程(第4版)_第10章_文件_第3页
第3页 / 共19页
C语言程序设计教程(第4版)_第10章_文件_第4页
第4页 / 共19页
C语言程序设计教程(第4版)_第10章_文件_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《C语言程序设计教程(第4版)_第10章_文件》由会员分享,可在线阅读,更多相关《C语言程序设计教程(第4版)_第10章_文件(19页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计教程(第4版),第10章 文件,李丽娟 2013年2月,本章主要内容,1.能够建立新文件和更新文件内容,2.能够从顺序文件中读取数据,3.了解对文件进行操作的步骤,4.熟悉对顺序文件进行操作的方式,5.了解对随机文件进行操作的方式,6.了解对文件的低级读写操作,第10章 文件操作,10.1 文件的概念,文件就是记载在外部存储器上的数据的集合。C语言把这些数据的集合看成是字符(或字节)序列。 (或者说C语言是把每一个文件都看作是一个有序的字节流),计算机可处理的文件:源程序,图形文件、音频文件、数据文件等等。按数据的组织形式可分为:文本文件、二进制文件C语言可以对文本文件和二进制文

2、件进行读写操作。,流是文件和程序之间通讯的通道,程序可以创建文件和对文件内容进行更新、修改。程序中所需的数据也可以从另一个文件中获得。,10.2 文件的操作,对文件的操作方式 1.缓冲文件系统(或称为标准I/O ) 2.非缓冲文件系统(或称为系统I/O )缓冲文件系统会自动地在内存中开辟一个文件缓冲区, 对文件进行处理时, 通过文件缓冲区进行输入/输出操作。非缓冲文件系统不设置缓冲区,由程序设置缓冲区的大小。,10.2 文件的操作,10.2.1 文件的打开与关闭文件指针:用于对文件进行操作。 文件指针的类型为结构类型,已由系统定义。 类型名为FILE(在头文件stdio.h中),定义形式如下:

3、,typedef struct short level; /* fill empty level of buffer */ unsigned flags; /* File status flags */ char fd /* File descriptor */ unsigned char hold; /* ungetc char if no buffer */ short bsize; /* Buffer size unsigned char *buffer; /* Data transfer buffer */ unsigned char *curp; /* Current active

4、pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */FILE; /* This is the FILE object */,10.2 文件的操作,10.2.1 文件的打开与关闭文件操作之前必须要先定义文件指针变量。 定义形式:FILE *; 如:FILE *fp; 则:fp 为指向 FILE 类型结构体的指针变量。文件操作步骤:打开文件对文件进行读/写操作关闭文件文件打开函数原型 FILE *fopen (char *filename, c

5、har *type); (注:filename代表的是一个文件名,该字符串可以是一个合法的带有路径的文件名; type字符串代表的是对文件的操作模式,不同的模式对应不同的操作。)常用的文本文件打开模式有6种,r 以只读方式打开一个文本文件w 以只写方式打开一个文本文件a 以追加方式打开一个文本文件r+ 以读/写方式打开一个文本文件w+ 以读/写方式建立一个新的文本文件a+ 以读/写方式打开一个文本文件,常用的文件的操作模式,rb 以只读方式打开一个二进制文件 wb 以只写方式打开一个二进制文件 ab 以追加方式打开一个二进制文件 rb+ 以读/写方式打开一个二进制文件 wb+ 以读/写方式建立

6、一个新的二进制文件 ab+ 以读/写方式打开一个二进制文件,注:并不是所有的C语言系统都具备以上文件操作模式,与编译器有关。,10.2 文件的操作,如有:FILE *fp; fp=fopen(“文件名”, “打开模式”);作用:打开由“文件名”指定的文件,以指定的“使用方式”对文件进行访问。若正确,则返回一个指向该文件的指针。若错误,则返回错误标志NULL。当 fp 指向某一具体的文件后,可通过该文件变量的成员信息访问文件的其它属性。【例10-1】 了解文件正确的打开方式。(分析和讨论), C语言规定:fopen()函数中的“文件名”可以在当前工作目录(相对路径)下;也可以在指定路径(绝对路径

7、)下。如: fopen(“myfile.c, r); fopen(c:DOSconfig.sys, r);,讨论,1. 文件“test.txt”所在位置如何?2. 在程序结束之前并没有关闭被打开的文件,文件会不会遭到破坏?3. 文件test.txt的内容是什么?,10.2 文件的操作,10.2.2 文件操作的错误检测文件操作的错误检测体现在两个地方 1.对文件的打开状态进行正确性判断; 2. 对文件进行读写操作进行正确性判断。 C语言提供了两个文件检测函数 1判断文件流上是否有错 int ferror(FILE *stream); 若正确,返回值为0,若发生错误,返回值为非零值。 2判断是否到

8、达文件尾 int feof(FIEL *stream); 若stream所指向的文件到达文件尾,则返回值为非零值,否则,返回值为0。,10.2 文件的操作,10.2.3 文件的顺序读写顺序读写是指文件被打开后,按照数据流的先后顺序对文件进行读/写操作.每读/写一次后,文件指针自动指向下一个读/写位置。通过调用系统函数实现对文件的读/写操作,系统函数的声明stdio.h中。,常用的顺序读写函数从文件读一个字符:fgetc(FILE *stream); 若正确:返回字符ch 若错误或到达文件尾:返回EOF 向文件写一个字符:char fputc(char ch,FILE *stream); 若正确

9、:返回一个非负数 若错误:返回EOF 分析【例10-2】 编写一个程序,将当前目录下的文本文件输出到屏幕上。 分析【例10-3】 编写一个程序,把从键盘输入的内容保存到文件中去。,10.2 文件的操作,常用的顺序读写函数2.从文件中读取字符串:char *fgets(char *string,int n,FILE *stream); 作用:从stream所指的文件中读取n1个字符,放到以string为起始地址的存储空间,若在n1个字符前,遇到回车换行符或文件结束符,则操作结束,并在读入的字符串后面加一个“0”字符。 若操作成功,返回值为str的地址; 若出错,返回值为NULL。 向文件写入字符

10、串:int fputs(char *str,FILE *stream) ; 作用:将stream所表示的字符串内容(不包含字符串最后的“0”)输出到str所指的文件中去. 若操作成功,返回一个非负数; 若出错,返回EOF。 分析【例10-4】 分析【例10-5】,10.2 文件的操作,常用的顺序读写函数3.按格式化读取字符: int fscanf (FILE *stream, char *format , 分析【例10-6】 分析【例10-7】,10.2 文件的操作,10.2.4 文件的随机读写对文件进行读写操作时,可以对文件中指定位置的信息进行读写操作。需要对文件进行准确定位,再对文件进行随

11、机读写。适合于具有固定长度记录的文件。系统提供的随机读写的定位函数原型在stdio.h中。,10.2 文件的操作,1文件定位函数原型 int fseek(FILE *stream,long offset, int position);如:fseek(fp, d, pos);作用:把文件指针fp移动到距pos为d个字节的地方。若定位成功,返回值为0;若定位失败,返回非零值。d为位移量,d的取值有以下两种情况: d0,表示fp向前(向文件尾)移动; d0,表示fp向后(向文件头)移动。pos为起始位置, pos的取值有以下3种可能的情况: pos=0或pos=SEEK_SET,表示文件指针在文件的

12、开始处; pos=1或pos=SEEK_CUR,表示文件指针在当前文件指针位置; pos=2或pos=SEEK_END,表示文件指针在文件尾。,10.2 文件的操作,2位置函数原型 long int ftell(FILE *stream); 如:loc =ftell(fp);作用:将fp所指位置距文件头的偏移量的值赋予长整型变量loc。若正确,则loc0;若出错,则loc=1L3重定位函数原型 void rewind(FILE *stream); 如:rewind(fp);作用:将文件指针fp重新指向文件的开始处。,10.2 文件的操作,文件随机读写函数:int fread (void *bu

13、f, int size, int count, FILE *stream); 作用:从stream所指的文件中读取count个数据项,每一个数据项的长度为size个字节,放到由buf所指的块中(buf通常为字符数组)。读取的字节总数为sizecount。 若成功,返回值为数据项数(count的值); 若出错或到达文件尾,返回值小于count。int fwrite (void *buf, int size, int count, FILE *stream); 作用:将count个长度为size的数据项写到stream所指的文件流中去。 若成功,返回值为数据项数(count的值); 若出错,则返回值小于count。分析【例10-8】分析【例10-9】,1. 文件流的概念2. 顺序读写函数 fgetc( ), fgets( ), fscanf ( ) fputc( ), fputs( ), fprintf( )3. 文件定位函数 fseek(); ftell(); rewind();4. 随机读写函数 fread( ), fwrite( ),本章重点,习 题,一、单选题二、判断题三、填空题四、程序填空题五、编程题【题10.34】 【题10.35】 【题10.36】 【题10.37】 【题10.39】 【题10.40】 【题10.44】,全部,

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

当前位置:首页 > 资格认证/考试 > 其它考试类文档

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