《C语言程序设计》课件第十章11.ppt
《《C语言程序设计》课件第十章11.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计》课件第十章11.ppt(35页珍藏版)》请在文库网上搜索。
1、第十章第十章 文文 件件10.1 10.1 语言文件概述语言文件概述10.2 10.2 文件的打开与关闭文件的打开与关闭10.3 10.3 文件的读写操作文件的读写操作10.4 10.4 位置指针与文件定位位置指针与文件定位10.5 10.5 出错检测出错检测在程序运行时,程序本身和数据一般都在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在存放在内存中。当程序运行结束后,存放在内存中的数据被释放。内存中的数据被释放。如果需要长期保存程序运行所需的原始如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文数据,或程序运行产生的结果,就必须以文件形式存储到
2、外部存储介质上。件形式存储到外部存储介质上。10.1 10.1 语言文件概述语言文件概述 1 1文件与文件名文件与文件名 文件:是指存放在外部存储介质上的数据集合。文件:是指存放在外部存储介质上的数据集合。说明:每个文件都必须有一个文件名。说明:每个文件都必须有一个文件名。格式:主文件名格式:主文件名.扩展名扩展名 文件命名规则:遵循操作系统的约定。文件命名规则:遵循操作系统的约定。2 2文件分类文件分类(1 1)根据文件的内容分)根据文件的内容分 .程序文件程序文件 .源文件源文件 .目标文件目标文件 .可执行文件可执行文件 .数据文件数据文件(2 2)根据文件的组织形式分)根据文件的组织形
3、式分 .顺序存取文件顺序存取文件 .随机存取文件。随机存取文件。(3 3)根据文件的存储形式分)根据文件的存储形式分 .ASCII.ASCII码文件码文件 说明:说明:ASCIIASCII码文件的每码文件的每1 1个字节存储个字节存储1 1个字符,个字符,对字符进行逐个处理。占用存储空间较对字符进行逐个处理。占用存储空间较 多,而且要花费转换时间(二进制与多,而且要花费转换时间(二进制与 ASCIIASCII码之间的转换)。码之间的转换)。.二进制文件二进制文件 说明:二进制文件是把内存中的数据,原样输出说明:二进制文件是把内存中的数据,原样输出 到磁盘文件中。可以节省存储空间和转换到磁盘文件
4、中。可以节省存储空间和转换 时间,但时间,但1 1个字节并不对应个字节并不对应1 1个字符,不能个字符,不能 直接输出字符形式。直接输出字符形式。3 3读文件与写文件读文件与写文件读文件:将磁盘文件中的数据传送到计算机内存读文件:将磁盘文件中的数据传送到计算机内存 的操作。的操作。写文件:从计算机内存向磁盘文件中传送数据的写文件:从计算机内存向磁盘文件中传送数据的 操作。操作。4 4构成文件的基本单元与流式文件构成文件的基本单元与流式文件在在其其它它高高级级语语言言中中,组组成成文文件件的的基基本本单单位位是是记记录录,对文件操作的基本单位也是记录。对文件操作的基本单位也是记录。语语言言将将文
5、文件件看看作作是是由由一一个个一一个个的的字字符符(ASCIIASCII码码文文件件)或或字字节节(二二进进制制文文件件)组组成成的的。将将这这种种文文件件称称为流式文件。为流式文件。5 5文件类型文件类型FILEFILE系系统统给给每每个个打打开开的的文文件件都都在在内内存存中中开开辟辟一一个个区区域域,用用于于存存放放文文件件的的有有关关信信息息(如如文文件件名名、文文件件位位置置等等)。这这些些信信息息保保存存在在一一个个结结构构类类型型变变量量中中,该该结结构构类类型型由由系系统定义、取名为统定义、取名为FILEFILE。注意:结构类型名注意:结构类型名“FILEFILE”必须大写。必
6、须大写。6 6ANSI CANSI C的缓冲文件系统的缓冲文件系统缓冲文件系统:指系统自动地在内存区为每个正在缓冲文件系统:指系统自动地在内存区为每个正在 使用的文件开辟一个缓冲区。使用的文件开辟一个缓冲区。说明:说明:从从内内存存向向磁磁盘盘输输出出数数据据时时,必必须须首首先先输输出出到到缓缓冲冲区中。待缓冲区装满后,再一起输出到磁盘文件中。区中。待缓冲区装满后,再一起输出到磁盘文件中。从从磁磁盘盘文文件件向向内内存存读读入入数数据据时时,首首先先将将数数据据读读入入到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。到缓冲区中,再从缓冲区中将数据逐个送到程序数据区。10.2 10.2 文件
7、的打开与关闭文件的打开与关闭对文件进行操作之前,必须先打开该文件;使用对文件进行操作之前,必须先打开该文件;使用结束后,应立即关闭,以免数据丢失。结束后,应立即关闭,以免数据丢失。语言规定了标准输入输出函数库,用语言规定了标准输入输出函数库,用fopen()fopen()函数打开一个文件,用函数打开一个文件,用fclose()fclose()函数关闭一个文件。函数关闭一个文件。10.2.1 10.2.1 文件的打开文件的打开fopen()fopen()函数函数格式:格式:FILE *fopen(FILE *fopen(文件名文件名,操作方式操作方式););功能:返回一个指向指定文件的指针。功能
8、:返回一个指向指定文件的指针。函数原型:函数原型:stdio.hstdio.h注:对文件操作的库函数,函数原型均在头文件注:对文件操作的库函数,函数原型均在头文件 stdio.hstdio.h中。后续函数不再赘述。中。后续函数不再赘述。说明:说明:(1 1)“文件名文件名”是指要打开(或创建)的文件名。若使用字符数是指要打开(或创建)的文件名。若使用字符数 组组(或字符指针或字符指针),则不使用双引号。,则不使用双引号。(2 2)“操作方式操作方式”如下表所示。如下表所示。文件使用方式文件使用方式 意意 义义 “rtrt”只读打开一个文本文件,只允许读数据只读打开一个文本文件,只允许读数据 “
9、wtwt”只写打开或建立一个文本文件,只允许写数据只写打开或建立一个文本文件,只允许写数据 “atat”追加打开一个文本文件,并在文件末尾写数据追加打开一个文本文件,并在文件末尾写数据 “rbrb”只读打开一个二进制文件,只允许读数据只读打开一个二进制文件,只允许读数据 “wbwb”只写打开或建立一个二进制文件,只允许写数据只写打开或建立一个二进制文件,只允许写数据 “abab”追加打开一个二进制文件,并在文件末尾写数据追加打开一个二进制文件,并在文件末尾写数据 “rt+rt+”读写打开一个文本文件,允许读和写读写打开一个文本文件,允许读和写 “wt+wt+”读写打开或建立一个文本文件,允许读
10、写读写打开或建立一个文本文件,允许读写 “at+at+”读写打开一个文本文件,允许读,或在文件末追加数据读写打开一个文本文件,允许读,或在文件末追加数据 “rb+rb+”读写打开一个二进制文件,允许读和写读写打开一个二进制文件,允许读和写 “wb+wb+”读写打开或建立一个二进制文件,允许读和写读写打开或建立一个二进制文件,允许读和写 “ab+ab+”读写打开一个二进制文件,允许读,或在文件末追加数据读写打开一个二进制文件,允许读,或在文件末追加数据例如:例如:FILE *fp;FILE *fp;fp fpfopen(data.99fopen(data.99,r)r);(3 3)如果不能实现打
11、开指定文件的操作,则)如果不能实现打开指定文件的操作,则fopen()fopen()函数返回一个空指针函数返回一个空指针NULL(NULL(其值在头文件其值在头文件stdio.hstdio.h 中被定义为中被定义为)。(4 4)“r r(b b)+”与与“a a(b b)+”的区别:使用前者打的区别:使用前者打 开文件时,读写位置指针指向文件头;使用后者开文件时,读写位置指针指向文件头;使用后者 时,读写指针指向文件尾。时,读写指针指向文件尾。(5 5)使用文本文件向计算机系统输入数据时,系统自)使用文本文件向计算机系统输入数据时,系统自 动将回车换行符转换成一个换行符;在输出时,动将回车换行
12、符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。使用二进将换行符转换成回车和换行两个字符。使用二进 制文件时,内存中的数据形式与数据文件中的形制文件时,内存中的数据形式与数据文件中的形 式完全一样,就不再进行转换。式完全一样,就不再进行转换。(6 6)有些编译系统,可能并不完全提供上述对文件的)有些编译系统,可能并不完全提供上述对文件的 操作方式,或采用的表示符号不同,请注意所使用操作方式,或采用的表示符号不同,请注意所使用 系统的规定。系统的规定。(7 7)在程序开始运行时,系统自动打开三个标准文件,)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:并分别定
13、义了文件指针:.标准输入文件标准输入文件stdinstdin:指向终端输入指向终端输入(一般为键盘一般为键盘)。如果程序中指定要从。如果程序中指定要从 stdinstdin所指的文件输入数据,就是从终端键盘上输所指的文件输入数据,就是从终端键盘上输 入数据。入数据。.标准输出文件标准输出文件stdoutstdout:指向终端输出指向终端输出(一般为显示器一般为显示器)。.标准错误文件标准错误文件stderrstderr:指向终端标准错误输出(一般为显示器)。指向终端标准错误输出(一般为显示器)。为为增增强强程程序序的的可可靠靠性性,常常用用下下面面的的方方法法打打开开一一个个文件:文件:if(
14、fp=fopen(if(fp=fopen(文件名文件名,操作方式操作方式)=NULL)=NULL)printf(can not open this filen);printf(can not open this filen);exit(0);exit(0);exit()exit()函数函数格式:格式:void exit(void exit(程序状态值程序状态值););功能:关闭已打开的所有文件,结束程序运行,功能:关闭已打开的所有文件,结束程序运行,返回操作系统,并将返回操作系统,并将“程序状态值程序状态值”返回返回 给操作系统。给操作系统。说明:当说明:当“程序状态值程序状态值”为时,表示程
15、序正常为时,表示程序正常 退出;非值时,表示程序出错退出。退出;非值时,表示程序出错退出。10.2.2 10.2.2 文件的关闭文件的关闭fcolse()fcolse()函数函数格式:格式:int fclose(FILE *int fclose(FILE *文件指针文件指针););功能:关闭功能:关闭“文件指针文件指针”所指向的文件。所指向的文件。说明:如果正常關閉了文件如果正常关闭了说明:如果正常關閉了文件如果正常关闭了 文件,则函数返回值为;否则,返文件,则函数返回值为;否则,返 回值为非。回值为非。例如,例如,fclose(fp)fclose(fp);/*/*关闭关闭fpfp所指向的文件
16、所指向的文件*/10.3 10.3 文件的读写操作文件的读写操作文件打开之后,就可以对它进行读与写的操作了。文件打开之后,就可以对它进行读与写的操作了。10.3.1 10.3.1 读写文件中的一个字符读写文件中的一个字符 10.3.2 10.3.2 读写一个字符串读写一个字符串 10.3.3 10.3.3 读写一个数据块读写一个数据块 10.3.4 10.3.4 对文件进行格式化读写对文件进行格式化读写 10.3.5 10.3.5 读写函数的选用原则读写函数的选用原则10.3.1 10.3.1 读写文件中的一个字符读写文件中的一个字符1 1将一个字符写到文件中将一个字符写到文件中fputc()
17、fputc()函数函数例例:将键盘上输入的一个字符串(以将键盘上输入的一个字符串(以“”作为结束字作为结束字 符),以符),以ASCIIASCII码形式存储到一个磁盘文件中。码形式存储到一个磁盘文件中。#include#include“stdio.hstdio.h”void main(int argc,char*argv)void main(int argc,char*argv)FILE*fp;FILE*fp;char ch;char ch;if(argc!=2)/*if(argc!=2)/*参数个数不对参数个数不对*/printf(the number of arguments not co
18、rrectnn);printf(the number of arguments not correctnn);exit(0);exit(0);if(fp=fopen(argv1,w)=NULL)/*if(fp=fopen(argv1,w)=NULL)/*打开文件失败打开文件失败*/printf(can not open this filen);printf(can not open this filen);exit(0);exit(0);/*/*输入字符,并存储到指定文件中输入字符,并存储到指定文件中*/for(;(ch=getchar()!=;)for(;(ch=getchar()!=;)f
19、putc(ch,fp);fputc(ch,fp);/*/*输入字符并存储到文件中输入字符并存储到文件中*/fclose(fp);fclose(fp);/*/*关闭文件关闭文件*/程序运行情况:程序运行情况:abcdefg1234567abcdefg1234567库函数库函数fputc()fputc():格式:格式:int fputc(int fputc(字符数据字符数据,文件指针文件指针););功能:将字符数据输出到功能:将字符数据输出到“文件指针文件指针”所指向的文件所指向的文件 中去,同时将读写位置指针向前移动中去,同时将读写位置指针向前移动1 1个字节个字节 (即指向下一个写入位置)。(
20、即指向下一个写入位置)。说明:说明:其中其中“字符数据字符数据”,既可以是字符常量,也可以,既可以是字符常量,也可以 是字符变量。是字符变量。如果输出成功,则函数返回值就是输出的字符如果输出成功,则函数返回值就是输出的字符 数据;否则,返回一个符号常量数据;否则,返回一个符号常量EOF(EOF(其值在头其值在头 文件文件stdio.hstdio.h中,被定义为中,被定义为-1)-1)。2 2从文件中读入一个字符从文件中读入一个字符fgetc()fgetc()函数和函数和feof()feof()函数函数 案例案例12.2 12.2 顺序显示顺序显示 案例案例12.112.1创建的磁盘创建的磁盘A
21、SCIIASCII码文件。码文件。/*/*案例代码文件名:案例代码文件名:AL12_2.C*/AL12_2.C*/*/*程序功能:顺序显示一个磁盘程序功能:顺序显示一个磁盘ASCIIASCII码文件码文件*/*/*参数:带参主函数,使用格式:可执行文件名参数:带参主函数,使用格式:可执行文件名 源文件名源文件名*/#include stdio.h#include stdio.hvoid main(int argc,char*argv)void main(int argc,char*argv)FILE*fp;FILE*fp;char ch;char ch;if(argc!=2)if(argc!=
22、2)/*/*参数个数不对参数个数不对*/printf(the number of arguments not correctn);printf(the number of arguments not correctn);printf(printf(“n Usage:n Usage:可执行文件名可执行文件名 源文件名源文件名););exit(0);exit(0);if(fp=fopen(argv1,r)=NULL)if(fp=fopen(argv1,r)=NULL)printf(can not open source filen);printf(can not open source filen
23、);exit(0);exit(0);/*/*顺序输出文件的内容顺序输出文件的内容*/for(;(ch=fgetc(fp)!=EOF;)for(;(ch=fgetc(fp)!=EOF;)putchar(ch);putchar(ch);/*/*顺序读入并显示顺序读入并显示*/fclose(fp);fclose(fp);/*/*关闭打开的文件关闭打开的文件*/程序运行情况:程序运行情况:abcdefg1234567abcdefg1234567(1 1)库函数)库函数fgetc()fgetc()1 1)用法:)用法:int fgetc(int fgetc(文件指针文件指针););2 2)功能:从)功能
24、:从“文件指针文件指针”所指向的文件中,读入一个所指向的文件中,读入一个 字符,同时将读写位置指针向前移动字符,同时将读写位置指针向前移动1 1个字个字 节(即指向下一个字符)。该函数无出错返节(即指向下一个字符)。该函数无出错返 回值。回值。例如,例如,fgetc(fp)fgetc(fp)表达式,从文件表达式,从文件fpfp中读一个字符,同中读一个字符,同 时将时将fpfp的读写位置指针向前移动到下一个字符。的读写位置指针向前移动到下一个字符。(2 2)关于符号常量)关于符号常量EOFEOF 在对在对ASCIIASCII码文件执行读入操作时,如果遇到文件码文件执行读入操作时,如果遇到文件尾尾
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课件 第十 11