C语言教学 第13章.ppt_第1页
C语言教学 第13章.ppt_第2页
C语言教学 第13章.ppt_第3页
C语言教学 第13章.ppt_第4页
C语言教学 第13章.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第13章文件,文件概述 文件的打开和关闭 文件的顺序读写 文件的随机读写 综合应用文件操作 跟我上机,第13章文件,文件概述 文件的打开和关闭 文件的顺序读写 文件的随机读写 综合应用文件操作 跟我上机,第13章文件,文件概述 文件的打开和关闭 文件的顺序读写 文件的随机读写 综合应用文件操作 跟我上机,第13章文件,文件概述 文件的打开和关闭 文件的顺序读写 文件的随机读写 综合应用文件操作 跟我上机,第13章文件,文件概述 文件的打开和关闭 文件的顺序读写 文件的随机读写 综合应用文件操作 跟我上机,第13章文件,文件概述 文件的打开和关闭 文件的顺序读写 文件的随机读写 综合应用文件操作

2、 跟我上机,第13章文件,文件概述 文件的打开和关闭 文件的顺序读写 文件的随机读写 综合应用文件操作 跟我上机,文件,计算机的内存中运行的程序和数据在关机后会自动消失,所以数据必须保存在可以永久性地存储数据的硬盘等外存上,以后在需要某部分数据的时候能随时调入内存使用。操作系统提供了对数据进行统一组织和管理的功能,这就是以“文件”的形式把数据存储在计算机的存储介质上。本章介绍有关文件的基本概念和操作。,13.1 文件概述,13.1.1 文件类型 13.1.2 C如何操作文件文件指针 13.1.3 文件缓冲区,13.1 文件概述,一个文件由一系列彼此有一定联系的数据集合构成,就像我们把社会上一个

3、个家庭作为社会的基本组成单位一样,我们也可以把家庭中的每一个成员看作是一个数据,并且我们通常以户主名来标识不同的家庭。同样,为了区分不同类型的数据构成的不同文件,我们给每个文件取个名字,就是文件名。为了更好的进行管理,家庭一般是隶属于某个居委会,居委会再隶属于上级组织;这种层次性的管理形式也用于对文件的管理,一般把一些相关的文件集中在一个文件夹中,一些彼此相关的文件夹还可以集中在更上一级的文件夹中,这就构成了“目录”。使用的时候,只要指明文件的名字和存放的路径,利用c语言的输入/输出函数库中提供的一些函数就可以完成有关文件中数据的读写等基本操作了。,13.1.1 文件类型,C语言中文件按其储存

4、数据的格式可分为文本文件和二进制文件。那么文本文件和二进制文件有哪些不同呢? 从概念上讲,文本文件中的数据都是以单个字符的形式进行存放的,每个字节存储的是一个字符的ASCII码值,把一批彼此相关的数据以字符的形式存放在一起构成的文件就是文本文件(也叫ASCII码文件)。而二进制文件中的数据是按其在内存中的存储样式原样输出到二进制文件中进行存储的,也即是说,数据原本在内存中是什么样子,在二进制文件中就还是什么样子的。,13.1.1 文件类型,例如,对于整数12345,在文本文件中存放时,数字“1”,“2”,“3”,“4”,“5”都以字符的形式各占一个字节,每个字节中存放的是这些字符的ASCII值

5、,所以要占用5个字节的存储空间;而在二进制文件中存放时,因为是整型数据所以系统分配两个字节的存储空间,也就是说,整数12345在二进制文件中占用两个字节。其存放形式如下图: 在文本文件中存储形式: 10101在二进制文件中存储形式:,13.1.1 文件类型,文本文件和二进制文件的主要区别有以下两点: 由于存储数据的格式不同,所以在进行读写操作时,文本文件以字节为单位进行写入或读出;而二进制文件则以变量、结构体等数据块为单位进行读写。 一般来讲,文本文件用于储存文字信息,一般由可显示字符构成,如说明性的文档、c语言的源程序文件都是文本文件;二进制文件用于存储非文本数据,如某门功课的考试成绩或者图

6、像、声音等信息。 具体应用时,应根据实际需要选用不同的文件格式。,13.1.2 C如何操作文件文件指针,在C语言中所有对文件的操作都通过文件指针完成。 我们在前面已经学习过变量的指针,变量的指针指向该变量的存储空间;但文件的指针不是指向一段内存空间,而是指向描述有关这个文件的相关信息的一个文件信息结构体,该结构体定义在stdio.h头文件中,当然,用户也无需了解有关此结构体的细节,只要知道如何使用文件指针就可以了,和普通指针一样,文件指针在使用之前,也必须先进行声明。,13.1.2 C如何操作文件文件指针,声明一个文件指针的语法格式如下: FILE *文件指针名; /*功能是声明一个文件指针*

7、/ 声明一个文件指针后,就可以使用它进行文件的打开、读写和关闭等基本操作了。 注 意:声明文件指针时,“FILE”必须全是大写字母!另外一定要记得要使用文件指针进行文件相关操作时,在程序开头处包含stdio.h头文件。,13.1.3 文件缓冲区,由于文件存储在外存储器上,外存的数据读写速度相对较慢,所以在对文件进行读写操作时,系统会在内存中为文件的输入或输出开辟缓冲区。 当对文件进行输出时,系统首先把输出的数据填入为该文件开辟的缓冲区内,每当缓冲区被填满时,就把缓冲区中的内容一次性地输出到对应文件中。当从某文件输入数据时,首先将从输入文件中输入一批数据放入到该文件的内存缓冲区中,输入语句将从该

8、缓冲区中依次读取数据;当该缓冲区中的数据被读完时,将再从输入文件中输入一批数据放入缓冲区。,13.2 文件的打开和关闭,13.2.1 文件的打开fopen()函数 13.2.2 文件的关闭fclose()函数 13.2.3 文件结束检测feof()函数,13.2.1 文件的打开fopen()函数,在C语言程序中,打开文件就是把程序中要读、写的文件与磁盘上实际的数据文件联系起来,并使文件指针指向该文件,以便进行其它操作。C语言输入/输出函数库中定义的打开文件的函数是fopen()函数,其一般使用格式如下: FILE *fp;/*声明fp是一个文件类型的指针*/ fp=fopen(文件名,打开方式

9、);/*以某种打开方式打开文件,并使文件指针fp指向该文件*/ 功能:以某种指定的打开方式打开一个指定的文件,并使文件指针fp指向该文件,文件成功打开之后,对文件的操作就可以直接通过文件指针fp了。若文件打开成功,fopen()函数返回一个指向FILE类型的指针值(非0值);若指定的文件不能打开,则该函数返回一个空指针值NULL。,13.2.1 文件的打开fopen()函数,说明:fopen()函数包含两个参数,调用时都必须用双引号括起来。其中,第一个参数(“文件名”)指定表示的是要打开的文件的文件名,必须用双引号括起,。如果该参数包含文件的路径,则按该路径找到并打开文件;如果省略文件路径,则

10、在当前目录下打开文件;第二个参数表示的是文件的打开方式,有关文件的各种打开方式见下表。,13.2.1 文件的打开fopen()函数,13.2.1 文件的打开fopen()函数,提 示:只读方式表示的是对目标文件只能读取数据,不可改变内容;只写方式是只能进行写操作,用于输出数据;追加方式表示的是在文件的末尾添加数据的方式;读写方式是既可以读取数据,又可以改写文件;而建立新文件就是指如果文件已存在则覆盖原文件。,13.2.1 文件的打开fopen()函数,无论是对文件进行读取还是写入操作时,都要考虑到在文件打开过程中会因为某些原因而不能正常打开文件的可能性。所以在进行打开文件操作时一般都要检查操作

11、是否成功。通常在程序中打开文件的语句是这样的。 01 FILE *fp; 02 if(fp=fopen(“abc.txt”, “r+”)=0)/*以读写方式打开文件,并判断其返回值*/ 03 04 printf (“Cant open this filen”); 05 exit(0); 06 第02行的语句执行过程是:先调用fopen()函数并以读写方式方式打开文件”abc.txt”,若该函数的返回值为0,则说明文件打开失败,显示文件无法打开的信息;若文件打开成功则文件指针fp得到函数返回的一个非0值;这里是通过判断语句if来选择执行不同的程序分支。,13.2.1 文件的打开fopen()函数

12、,另外,“NULL” 是stdio.h中定义的一个符号常量,代表数值0,表示空指针。因而有时在程序语句中也用NULL代替0。即02行语句也可以是: if(fp=fopen(“abc.txt”, “r+”)=NULL),13.2.2 文件的关闭fclose()函数,所谓关闭文件就是使文件指针与它所指向的文件脱离联系,一般当文件的读或写操作完成之后,应及时关闭不再使用的文件。这样一方面可以重新分配文件指针去指向其他文件,另外特别是当文件的使用模式为“写”方式时,在关闭文件的时候,系统会首先把文件缓冲区中的剩余数据全部输出到文件中,然后再使两者脱离联系,此时,如果没有执行正常的关闭文件的操作而直接结

13、束程序的运行,就会造成缓冲区中剩余数据的丢失。,13.2.2 文件的关闭fclose()函数,C语言输入/输出函数库中定义的关闭文件的函数是fclose()函数,其一般使用格式如下: fclose(文件指针); fclose()函数只有一个参数“文件指针”,它必须是由打开文件函数fopen()得到的,并指向一个已经打开的文件。 功能:关闭文件指针所指向的文件。执行fclose()函数时,若文件关闭成功,返回0,否则返回-1。 在程序中对文件的读写操作结束后,对文件进行关闭时,调用fclose()函数的语句是: fclose(fp);/*fp是指向要关闭的文件的文件指针*/,13.2.2 文件的

14、关闭fclose()函数,技 巧:因为保持一个文件的打开状态需要占用内存空间,所以对文件的操作一般应该遵循“晚打开,早关闭”的原则,避免无谓的浪费。,13.2.3 文件结束检测feof()函数,feof()函数用于检测文件是否结束,既适用于二进制文件,也适用于文本文件。其一般使用格式如下: feof(文件指针); 其中,“文件指针”指向一个已经打开并正在操作的文件。 功能:测试文件指针fp所指向的文件是否已读到文件尾部。若已读到文件末尾,返回值为1;否则,返回值为0。,13.2.3 文件结束检测feof()函数,说明:在读文件操作时,需要检测是否读到文件的结尾处,常用“while(!feof(

15、fp)”循环语句来控制文件中内容的读取。如当前读取的内容不是文件尾部,则feof(fp)的值为0,取非运算后值为1,那么循环继续执行;若已读到文件结尾,则feof(fp)的值为1,取非运算后值为0,循环结束,也即是读文件操作结束。 例如:如果想顺序读取文本文件中的字符,代码如下: while(!feof(fp) c=fgetc(fp);/*从文件中读一个字符赋值给变量c */ /*其他操作*/ ,13.3 文件的顺序读写,13.3.1 文本文件中字符的输入/输出 13.3.2 文本文件中字符串的输入/输出 13.3.3 格式化输入/输出 13.3.4 二进制文件的输入输出数据块读写,13.3

16、文件的顺序读写,拿到一本书,可以从头到尾顺序阅读,也可以跳过一部分内容而直接翻到某页进行阅读。对文件的读写操作也是这样的,可以分为顺序读写和随机读写两种方式。顺序读写方式指的是从文件首部开始顺序读写,不允许跳跃;随机读写方式也叫定位读写,是通过定位函数定位到具体的读写位置,在该位置处直接进行读写操作。一般来讲,顺序读写方式是默认的文件读写方式。 文件的顺序读写常用的函数是: 字符输入/输出函数:fgetc, fputc 字符串输入/输出函数:fgets, fputs 格式化输入/输出函数:fscanf, fprintf 数据块输入/输出函数:fread, fwrite 特别指出:有关以上这些函

17、数原型的定义都在stdio.h文件中,因此在程序中调用这些函数时,必须在程序开始处加入预处理命令: #include studio.h,13.3.1 文本文件中字符的输入/输出,对于文本文件中数据的输入/输出,可以是以字符为单位,也可以是以字符串为单位。本节介绍文本文件中以字符为单位的的输入/输出函数:fgetc()和fputc()函数。 1. 文件字符输入函数fgetc() fgetc()函数的一般使用格式如下: char ch; /*定义字符变量ch*/ ch=fgetc(文件指针); 功能:该函数从文件指针所指定的文件中读取一个字符,并把该字符的ASCII值赋给变量ch。执行本函数时,如

18、果是读到文件末尾,则函数返回文件结束标志EOF。,13.3.1 文本文件中字符的输入/输出,说明:文件输入是指从一个已经打开的文件中读出数据并将其保存到内存变量中,这里的“输入”是相对内存变量而言的。 例如,要从一个文本文件中读取字符并把其输出到屏幕上,代码如下: ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); 第2行代码中的EOF字符常量是文本文件的结束标志,它不是可输出字符,不能在屏幕上显示。该字符常量在stdio.h中定义为-1,因此当从文件中读入的字符值等于-1时,表示读入的已不是正常的字符而是文本文件结束符。上面例子中的02行等价

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论