C语言程序设计 教学课件 ppt 作者 董汉丽 等 第9章文件

上传人:E**** 文档编号:89381714 上传时间:2019-05-24 格式:PPT 页数:42 大小:163KB
返回 下载 相关 举报
C语言程序设计 教学课件 ppt 作者 董汉丽 等 第9章文件_第1页
第1页 / 共42页
C语言程序设计 教学课件 ppt 作者 董汉丽 等 第9章文件_第2页
第2页 / 共42页
C语言程序设计 教学课件 ppt 作者 董汉丽 等 第9章文件_第3页
第3页 / 共42页
C语言程序设计 教学课件 ppt 作者 董汉丽 等 第9章文件_第4页
第4页 / 共42页
C语言程序设计 教学课件 ppt 作者 董汉丽 等 第9章文件_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《C语言程序设计 教学课件 ppt 作者 董汉丽 等 第9章文件》由会员分享,可在线阅读,更多相关《C语言程序设计 教学课件 ppt 作者 董汉丽 等 第9章文件(42页珍藏版)》请在金锄头文库上搜索。

1、第九章 文 件,掌握文件的组织形式及C对文件的分类; 掌握C对文件操作的过程; 掌握文件型指针的作用及使用; 掌握文件的顺序访问及随机访问方法; 尽可能多地了解C中有关文件操作的函数。,9.1 C文件概述,一、文件的分类,C的文件指存储在外部介质上的一组数据集合。通过C语言提供的文件操作函数,可以简单、高效、安全地访问外部数据。 语言本身并不直接支持文件操作。它的开发环境提供了一批文件操作的函数。通过函数实现文件的种种操作,如文件的建立、读写等。,为了便于文件处理,根据数据的组织形式,把文件分成文本文件和二进制文件。,1.文本文件,2.二进制文件,也称ASCII文件,因为,它的每一个字节放一个

2、ASCII码,代表一个字符。文件的内容是由一个个字符的ASCII码组成的。,指文件的内容以二进制方式(由0或1组成的代码)来存放的文件。此文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。,注意!这种分类完全是人为的,实际上,无论是ASCII文件还是二进制文件,存储的都是0和1。,文本文件和二进制文件各有千秋: 一般,同样的数据用文本方式保存时占用的空间比用二进制方式相对较大;文本文件容易让人阅读和理解,二进制文件不能让人直接阅读;计算机处理ASCII码表示的信息时通常需要转换,而使用二进制时不需要转换。因此使用文件时,要根据实际情况选择合适的文件类型。,所有文件内容的存储都顺序

3、进行。使用文件时,就像在一个长长的串中浏览信息。如果视角固定,则文件就像一个流动的串。因此把文件看成流(stream),文件又称为流式文件。文本文件又称为文本流,二进制文件又称为二进制流。,对文件流的处理方式分为:缓冲型和非缓冲型。 缓冲型指在流处理时,系统为该流自动分配一块缓冲区,流中当前操作的数据就放在这个缓冲区。当需要读流中的数据时,系统首先从这个缓冲区中查找。如果没找到,就一次性从外存读取一个较大的数据块到这个缓冲区。如果找到了,就不再访问文件本身。向流中写数据时,也是先写到缓冲区,直到缓冲区满时,才写到外存中的文件中。非缓冲型文件系统下,不自动建立缓冲区,如果需要,可由用户建立并管理

4、这个缓冲区。教材只介绍缓冲型文件流的处理方式。,二、文件的操作过程,1.打开文件,目的是建立操作系统与某个物理文件的关联,并为其在内存中分配相应的存储区。,2.访问文件,对文件内容进行读写。用于存储和读取数据。,3.关闭文件,清空系统保留的缓冲区,撤消操作系统与物理文件的联系,把占有的内存交给操作系统。,文件当前读写位置指针:始终指向要访问文件的下一个字节的数据位置。 文件头:文件内容中首字节位置处。一般情况下,打开文件后,当前读写位置指针都位于文件头。 文件尾:文件内容中最后一个字节后面的位置。注意,不是文件内容中最后一个字节的位置! 文件出错标记:在文件流的结构中设置。用于记录最后一个文件

5、操作的情况,方便开发人员进行文件操作后的处理。,几个概念:,9.2 文件类型指针,C在stdio.h中定义了一个结构类型用于保存打开文件时所需的信息,此类型就是文件结构类型。 规定:进行文件操作前,必须先用文件类型指针建立与打开文件流的联系。然后才能使用这个指针进行与文件相关的操作。 所谓文件类型指针,就是一个指向FILE型结构类型的指针。,9.3 文件的打开与关闭,Turbo C在启动时,已经自动打开了下面几个标准文件:,stdin 标准输入设备,一般指键盘。 stdout 标准输出设备,一般指显示器。 stderr 标准出错输出设备,也指显示器。 stdprn 标准打印设备,一般指默认的打

6、印机。,程序中使用这些设备时,就不需要打开和关闭的操作了。这几个标准设备文件都是常量,不能改变。,一、文件的打开函数fopen( ),以opstyle指定的方式,打开由filename指定的文件,并返回指向文件型结构的指针。,功能:,说明:,(1)filename 为一个字符型指针,指向一个要打开或创建的文件名。文件名中可以使用路径,但路径中的“”要用“”代替。,(2)opstyle 也是一个字符型指针,它指定打开文件时的访问方式。它只能从下表列出的值中选取:,(3)如果因为某种原因,不能打开文件,此函数返回一个空指针NULL(在stdio.h中被定义为)。因此实际应用时,通常要在打开文件操作

7、后,对函数返回的指针值进行判断,以决定下一步要采取的动作。例如:,if (fp=fopen(filename,opstyle)=NULL) printf(“n Can not open this file. Please check file name and path. “); exit(1); ,(4)在环境中,当把文本保存到文本文件中时,系统自动将回车换行符转换为一个换行符保存到文件中。当从文本文件中读取文本时,系统又自动把从文件中读取的换行符转换为回车和换行符。使用二进制文件时不会发生这种转换。,二、文件的关闭函数fclose( ),功能:,关闭由文件型指针fp指向的文件流,释放其所占

8、用的缓冲区。如果关闭文件正常,则此函数返回;否则返回一个非值。,说明:,(1)使用此函数每次只能关闭一个文件。 (2)一旦关闭了与fp相关联的文件后,fp可以再次被用作指向其它要打开的文件。,9.4 文件的读写,一、字符读写函数fputc()和fgetc(),1.读字符函数fgetc(),当成功打开一个文件后,操作系统会为每个打开的文件,产生一个32位的当前读写位置指针。访问文件时,被访问的内容就是这个指针所指向的内容。访问后,该指针自动递增到下一个位置。一般情况下,文件刚打开时,它总是指向文件头,即它的值为0L。如果连续读取这个文件,就可以把这个文件的内容按照从头到尾的顺序访问一遍。,功能:

9、,从文件指针fp指向的文件流中的当前读写位置,读入一个字符。之后,读写位置指针指向下一字符位置。此函数没有出错返回值。它的返回值是读取字符的ASCII码。,说明:,如果读到了文件结束处,此函数会返回一个EOF(在stdio.h中定义为-1)。在Turbo C环境中建立的源程序文件,保存后会自动附加一个0x1a到文件最后,这就是DOS时代的文本文件结尾符。,【例9.1】显示文本文件内容。运行此程序时,显示与此程序同目录下的一个C程序文件的内容。,#include void main() FILE *fp; /*定义文件型指针*/ char ch; if(fp=fopen(“test.c“,“r“

10、)=NULL) printf(“nCant open file.n“); exit(1); ch=fgetc(fp); /*读取一个字符*/ while(ch!=EOF) /*如果不到文件尾时继续*/ putchar(ch); /*显示读取的字符*/ ch=fgetc(fp); /*继续读后面的字符*/ fclose(fp); /*关闭文件*/ ,2、写字符函数fputc(),功能:,将一字符ch写到fp所指向文件的当前读写位置处。之后读写位置指针加1,指向下一个位置。如果输出成功,返回刚写入的字符;否则返回EOF。,【例9.2】在一个文本文件后面添加一些内容。运行此程序时,在与此程序同目录下

11、的一个文件内容的后面添加一些字符。,#include void main() FILE *fp; /*定义文件型指针*/ char ch; if(fp=fopen(“test.c“,“a“)=NULL) printf(“nCant open file.n“); exit(1); ch=getchar(); /*从键盘输入一个字符*/ while(ch!=EOF) /*如果不到文件尾时循环*/ fputc(ch,fp);/*把字符保存到文件中*/ ch=getchar();/*继续输入新字符*/ fclose(fp); /*关闭文件*/ ,#include void main() FILE *f

12、p; /*定义文件型指针*/ char ch; if(fp=fopen(“output.txt“,“w“)=NULL) printf(“Cant create file.n“); exit(1); ch=getc(stdin); /*从键盘上读取一个字符*/ while(ch!=EOF) /*如果不是结尾符时继续循环*/ putc(ch,fp); /*继续读后面的字符*/ ch=getc(stdin); fclose(fp); /*关闭文件*/ ,【例9.3】把键盘上输入的内容形成一个文本文件。,二、字符串读写函数fgets()和fputs(),1.读字符串函数fgets(),功能:,从由fp

13、指向的文件流中读入指定长度(length-1)的字符串,保存到缓冲区buffer中。如果读入结束前遇到了文件尾或换行符时,自动结束。换行符也将保存到读入的串中。读后的文件读写位置指针向后移动strlen(buffer)个字节。 如果读时出错或到文件尾,返回NULL;否则返回指向读出字符串的指针。,2.写字符串函数fputs(),功能:,把字符串buffer中的内容(不包括0),写入到fp所指向的文件流中的当前读写位置。如果写成功,则返回最后一个写入字符的ASCII值;否则返回-1。文件读写指针也同时移到写入数据后的位置。,【例9.4】编程:生成一个名为test.txt的文本文件,把用户输入的若

14、干个字符串保存到这个文件中。当输入空串时结束。最后完整显示该文件的内容。,#include void main() FILE *fp; /*定义文件型指针*/ char str81; /*定义缓冲区*/ if(fp=fopen(“test.txt“,“w“)=NULL) printf(“nCant open file.n“); exit(1); printf(“nPlease input some strings:n“); gets(str); /*从键盘输入一字符串*/ while(strlen(str) /*如果输入的不是空串*/ fputs(str,fp); /*把字符串保存到文件中*/

15、 fputc(n,fp); /*简化处理,人为在每个串后添加一个换行符*/ gets(str); /*继续输入新字符串*/ fclose(fp); /*关闭文件,然后再以读方式打开*/ if(fp=fopen(“test.txt“,“r“)=NULL) printf(“nCant open file.n“); exit(1); while(fgets(str,81,fp) /*如果得到的不是空串*/ printf(“%s“,str); /*显示此字符串,不能用puts()*/ fclose(fp); /*关闭文件*/ ,三、数据块读写函数fread()和fwrite(),1.读数据块函数fre

16、ad(),功能:,从fp所指向的文件流中读取count个size字节大小的数据块,保存到内存中的buffer缓冲区中。同时,将文件当前读写位置指针,移到读取数据后的下一个字节位置。函数的返回值是成功读取的数据块数(不是字节数)。,2.写数据块函数fwrite(),功能:,向fp指向的文件流中写入count个size字节大小的数据块。这些数据保存在内存中的buffer缓冲区。写入后,将文件读写位置指针移到写入数据后的下一个字节位置。函数的返回值是成功写入的数据块数。,【例9.5】编程:把输入的若干个学生的情况保存到一个叫test.dat的文件中。当输入的姓名为空时结束输入。最后再把这个文件的内容完整显示出来。,#include struct student /*定义一个结构体类型*/ char name10; i

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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