项目12文件.ppt
《项目12文件.ppt》由会员分享,可在线阅读,更多相关《项目12文件.ppt(83页珍藏版)》请在三一办公上搜索。
1、项目12文 件,12.1 文件概述12.2 文件的打开与关闭12.3 文件的读/写操作12.4 位置指针与文件定位12.5 本章小结习题实验题,在本书的第1章,我们已经在C语言编译系统环境下将源程序输入到了计算机里,然后把它们以文件的形式存储到了磁盘上。我们将这种记录在外部介质上的数据的集合称为“文件”。文件是C语言程序设计中的一个重要概念,在程序运行时,程序本身和数据一般都存放在内存中。当程序运行结束后,存放在内存中的数据(包括运行结果)就被释放。如果需要长期保存程序运行所需的原始数据,或程序运行产生的结果,就必须以文件形式存储到外部存储介质上。本章介绍如何用C语言编译系统提供的库函数实现对
2、文件的打开、关闭及读/写等操作。,12.1 文 件 概 述1文件的分类文件可以从不同的角度进行分类:(1)根据文件的内容来分,可分为源程序文件、目标文件、可执行文件和数据文件等。(2)根据文件的组织形式来分,可分为顺序存取文件和随机存取文件。,(3)根据文件的存储形式来分,可分为ASCII码文件(又称文本文件)和二进制文件。ASCII码文件是每一个字节存储一个ASCII码(代表一个字符)。二进制文件是把内存中的数据,原样输出到磁盘文件中。有一个整数100,如果按二进制形式存储,两个字节就够用;如果按ASCII码形式存储,由于每位数字都占用一个字节,所以共需要三字节空间,如图12-1所示。,图1
3、2-1 数值的存储形式示意图(a)ASCII码存储形式;(b)二进制存储形式,用ASCII码形式存储,一个字节存储一个字符,因而便于对字符进行逐个处理,但一般占用存储空间较多,而且要花费转换时间(二进制与ASCII码之间的转换)。用二进制形式存储,可以节省存储空间和转换时间,但一个字节并不对应一个字符,不能直接输出字符形式。,2读文件与写文件 所谓读文件,是指将磁盘文件中的数据传送到计算机内存的操作;所谓写文件,是指从计算机内存向盘文件中传送数据的操作,如图12-2所示。,图12-2 读/写文件操作示意图,3文件类型系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、
4、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义,取名为FILE(注意:“FILE”必须大写),并放在头文件中。有了FILE类型之后,就可以定义一个指向FILE类型的指针变量,并通过该指针访问文件。文件类型指针的定义格式为FILE*文件类型指针变量名;例如:FILE*fp,*fp1,*fp2;,4缓冲文件系统(标准I/O)所谓缓冲文件系统,是指系统自动地在内存区为每个正在使用的文件开辟一个缓冲区。从磁盘文件向内存读入数据时,首先将一批数据读入到文件缓冲区中,再从文件缓冲区将数据逐个送到程序数据区,如图12-3所示。,图12-3 缓冲文件系统的输入示意图,从内存向磁盘输出数据
5、时,则正好相反:必须先将一批数据输出到缓冲区中,待缓冲区装满后,再一起输出到磁盘文件中,如图12-4所示。,图12-4 缓冲文件系统的输出示意图,12.2 文件的打开与关闭与其他高级语言一样,对文件进行操作之前,必须先打开文件;使用结束后,为避免数据丢失,应立即关闭该文件。所谓打开文件,是指一个文件指针变量指向被打开文件的结构变量,以便通过指针变量访问打开文件。,所谓关闭文件,是指把(输出)缓冲区的数据输出到磁盘文件中,同时释放文件指针变量(即使文件指针变量不再指向该文件)。此后,不能再通过该指针变量来访问该文件,除非重新打开。C语言规定了标准输入/输出函数库:用fopen()函数打开一个文件
6、;用fclose()函数关闭一个文件。,12.2.1 文件的打开(fopen()函数)1格式打开文件的格式为fopen(文件名,打开方式);其中,文件名是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。打开方式如表12-1所示。如:FILE*fp;fp=fopen(file1,r);表示以“只读”方式打开数据文件“file1”,并将其指针赋给指针变量fp。,表12-1 文件操作方式一览表,2功能fopen()函数的功能是返回一个指向指定文件的指针。3说明(1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL(其值在头文件stdio.h中被定
7、为0)。常用下面的方法打开一个文件:if(p=fopen(文件名,打开方式)=NULL)printf(can not open this filen);exit(0);/*关闭打开的所有文件,程序结束运行,返回操作系统*/,其中,exit()是一个函数,使用格式为void exit(程序状态值);作用是关闭已打开的所有文件,结束程序运行并返回操作系统,同时将“程序状态值”返回给操作系统。当“程序状态值”为0时,表示程序正常退出;为非0时,表示程序是出错后退出。(2)“r(b)+”与“a(b)+”的区别:使用前者打开文件时,读/写指针指向文件头;使用后者时,读/写指针指向文件尾。,(3)使用文本
8、文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,因而不再进行转换。(4)有些C编译系统,可能并不完全提供上述对文件的操作方式,或采用的表示符号不同。例如,有的系统只能用“r”、“w”和“a”方式;有的系统不用“r+”、“w+”和“a+”,而用“rw”、“wr”和“ar”表示。请注意所使用系统的规定。,(5)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:标准输入文件stdin:指向终端输入(一般为键盘)。如果程序中指定要从stdin所指的文件输入数据,就
9、是从终端键盘上输入数据。标准输出文件stdout:指向终端输出(一般为显示器)。标准错误文件stderr:指向终端标准错误输出(一般为显示器)。,12.2.2 文件的关闭(fclose()函数)在使用完一个文件后,为防止被误用或数据丢失,应该及时关闭。关闭文件的方法是:fclose(文件指针);功能是关闭文件指针所指向的文件。如果正常关闭了文件,则函数返回值为0;否则,返回值为非0。例如:fclose(fp);表示关闭fp所指向的文件。,12.3 文件的读/写操作文件打开之后,就可以对它进行读与写的操作了。12.3.1 读/写文件中的一个字符fgetc()函数和fputc()函数1将一个字符写
10、到文件中fputc()函数【例12.1】将键盘上输入的一个字符串(以“”作为结束字符),以ASCII码形式存储到一个磁盘文件中。,/*程序功能:从键盘上输入一个字符串,将其存储到一个磁盘文件中*/#include stdio.hmain(int argc,char*argv)FILE*fp;char ch;if(argc!=2)/*参数个数不对*/printf(the number of arguments not correctnn);printf(Usage:可执行文件名 filenamen);exit(0);,if(fp=fopen(argv1,w)=NULL)/*打开文件失败*/pri
11、ntf(can not open this filen);exit(0);/*输入字符,并存储到指定文件中*/for(;(ch=getchar()!=;)fputc(ch,fp);/*输入字符并存储到文件中*/fclose(fp):/*关闭文件*/,程序运行准备:在Options|Arguments 文本框中,输入文件名“temp.txt”。注:只要符合文件命名规则,读者完全可以根据自己的习惯或爱好,给文件另外命名。程序运行情况:abcdefg1234567,说明:1)for语句的循环条件表达式在for语句的循环条件表达式中,集成了对字符的输入(getchar()、赋值(ch=getchar(
12、)和判断(ch=getchar()!=),使得程序高度简洁。这正是C语言将赋值操作作为运算(可构成表达式)来处理的优越性!请读者自己体会。,2)fo语句循环体中的库函数fputc()(1)用法:int fputc(字符数据,文件指针);其中,字符数据既可以是字符常量,也可以是字符变量。(2)功能:将字符数据输出到文件指针所指向的文件中去,同时将读/写位置指针向前移动一个字节(即指向下一个写入位置)。,如果输出成功,则函数返回值就是输出的字符数据;否则,返回一个符号常量EOF(其值在头文件stdio.h中,被定义为 1)。例如:fputc(ch,fp);表示将ch中存储的字符输出到fp所指向的文
13、件中。,2从文件中读入一个字符fgetc()函数和feof()函数【例12.2】顺序显示【例12.1】创建的ASCII码文件。/*程序功能:顺序显示一个磁盘ASCII码文件*/*参数:带参主函数;使用格式:可执行文件名 源文件名*/#includestdio.hmain(int argc,char*argv)FILE*fp;char ch;if(argc!=2)/*参数个数不对*/,printf(the number of arguments not correctn);printf(n Usage:可执行文件名 source file)exit(0);if(fp=fopen(argv1,r)
14、=NULL)/*打开源文件失败*/printf(can not open source filen);,exit(0);/*顺序输出文件的内容*/for(;(ch=fgect(fp)!=EOF;)putchar(ch);/*顺序读入并显示*/fclose(fp);/*关闭打开的文件*/,程序运行准备:在Options|Arguments 文本框中,输入文件名“temp.txt”。程序运行情况:abcdefg1234567说明:1)循环语句中的库函数fgetc()(1)用法:int fgetc(文件指针);,(2)功能:从文件指针所指向的文件中,读入一个字符,同时将读/写位置指针向前移动一个字节
15、(即指向下一个字符)。该函数无出错返回值。例如,fgetc(fp)表达式表示从文件fp中读一个字符,同时将fp的读/写位置指针向前移动到下一个字符。,2)关于符号常量EOF在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。在本例中,通过判断读入的字符是否等于符号常量EOF,来决定循环是否继续。在对二进制文件执行读入操作时,必须使用库函数feof()来判断是否遇到尾文件。关于库函数feof()的介绍,请参见【例12.3】的程序说明。,【例12.3】实现制作ASCII码文件副本的功能。/*程序功能:制作ASCII
16、码文件的副本*/*参数:带参主函数;使用格式:可执行文件名 源文件名 目标文件名*/#includestdio.hmain(int argc,char*argv)FILE*input,*output;/*input:源文件指针,output:目标文件指针*/char ch;if(argc!=3)/*参数个数不对*/,printf(the number of arguments not correctn);printf(n Usage可执行文件名 源文件名 目标文件名);exit(0);if(fp=fopen(argv1,r)=NULL)/*打开源文件失败*/printf(can not ope
17、n source filen);exit(0);,if(fp=fopen(argv2,w)=NULL/*创建目标文件失败*/printf(can not create destination filen)exit(0);/*复制源文件到目标文件中*/for(;(!feof(input);)fputc(fgetc(input),output);fclose(input);fclose(output);/*关闭源文件和目标文件*/,程序运行准备:在Options|Arguments 文本框中,输入源文件名和目标文件名“temp.txt”,“temp2.txt”。说明:1)循环条件表达式中的库函数f
18、eof()(1)用法:int feof(文件指针),(2)功能:在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1),否则,返回逻辑假(0)。feof()函数同时适用于ASCII码文件和二进制文件。例如,!feof(input)表示源文件(用于输入)未结束,循环继续。2)循环体语句“fputc(fgetc(input),output);”此语句表示从文件input中读一个字符(fgetc(input),然后输出到文件output中。,12.3.2 读/写一个字符串fgets()函数和fputs()函数【例12.4】将键盘上输入的一个长度不超过80的字符串,以ASCII码形式存储到一个磁盘
19、文件中,然后再输出到屏幕上。/*程序功能:从键盘上输入一个字符串,存储到一个磁盘文件中,并显示输出*/*参数:带参主函数;使用格式:可执行文件名 要创建的磁盘文件名*/#includestdio.hmain(int argc,char*argv),FILE*fp;/*文件类型名“FILE”,必须大写*/char string81;/*字符数组用于暂存输入/输出的字符 串*/if(argc2)/*参数太多,提示出错*/printf(Too many paramentersnn);exit(0);,if(argc=1)/*缺磁盘文件名,提示输入*/printf(Input the filename
20、:);gets(string);/*借用string数组暂存输入的文件名*/argv1=(char*)malloc(strlen(string)+1);/*给文件名参数申请内存空间*/strcpy(argv1,string);/*复制文件名到形参中*/if(fp=fopen(argv1,w)=NULL)/*打开文件失败*/printf(can not open this filen);exit(0),/*从键盘上输入字符串,并存储到指定文件中*/printf(Input a string:);gets(string);/*从键盘上输入到字符串*/fputs(string,fp);/*存储到指定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目 12 文件
链接地址:https://www.31ppt.com/p-5772909.html