版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章文件文件是指计算机中存储在外部存储设备上数据的集合。由于一般的应用程序都会使用到对文件的操作。例如,一个学生成绩统计程序,要涉及很多同学的成绩数据。如果在调试这个程序时,已经输入了很多数据,却发现这个程序有问题,就不得不去修改程序来改正错误,然后再次运行这个程序,再次输入那些成绩数据。另外,如果程序正确,但在输入数据时,发现已经输入的数据有问题,却无法改变,也不得不再次运行程序,重新输入那些数据。这样花费在数据输入上的时间将是大量的。解决的方法是用文本编辑器或其他数据输入工具,将这些数据事先存入到文件中,程序从这个文件中将数据读入,问题就解决了。本章要点:(1)文件的基本概念;(2)文件的打开与关闭(3)对文件进行读写操作。返回10.1文件概述C语言使用的文件是“流”式文件,在内存与外部存储器之间,数据的传递形式有2种,对应的文件也有两种。1.字符流——字符(文本)文件一个字符一个字符的传输,称之为字符流。字符流所对应的文件,称为字符文件(也称文本文件、正文文件)。即这种文件的传输与存储都是以字符(字节)为单位进行的。文本文件的优点是易读、易改、易建立。用常用的字处理器都可以建立或修改。其缺点是处理速度比较慢;需要将其他类型的数据转换为字符。2.二进制流——二进制文件数据以内存存储的方式进行传输和存储,由于没有数据转换问题,因此其处理速度比较快,但几乎是无法阅读和修改。可执行文件及系统文件都是二进制文件。操作系统对文件的管理,在进行内存数据与文件之间的交换时,又分为直接交换和间接交换方式。直接把内存的数据保存到文件,或将文返回下一页10.1文件概述件中的数据读入到内存的文件管理系统,称非缓冲文件系统,如图10.1所示,而写文件和读文件要经过缓冲区间接的进行交换的文件管理系统,称缓冲文件系统。如图10.2所示。采用缓冲区的主要目的是为了提高CPU的利用率,这是因为内存与外存在数据处理速度上有明显的差异。程序只负责将数据区的数据存入输出缓冲区,或从输入缓冲区中读数据到数据区。缓冲区是内存的一块区域,数据区与缓冲区中的数据交换速度是一致的。而缓冲区与文件的数据交换由操作系统完成:当有写操作请求时,发现输出缓冲区数据满了,操作系统将缓冲区中的数据才全部写入文件;当有读操作请求时,发现输入缓冲区为空,操作系统将从文件中读入数据至输入缓冲区,以提供程序需要的数据。上一页返回10.2内部文件和外部文件外部文件是指存储在外存上的实际文件,以文件名来表示它,操作系统“按名存取”方式来对文件实加各种操作。内部文件是指程序中处理文件的变量,也称这种变量叫文件句柄。在C语言中是通过说明文件类型的指针来建立。一般说明格式为:
FILE*文件指针;其中:FILE已经在stdio.h中定义,它是一种结构体类型,包含了文件的有关信息。fp是文件指针,以后只要把fp建立好与外部文件的联系,通过它就可以使用实际的文件了。返回10.3文件的打开与关闭10.3.1文件的打开在使用文件之前,要事先建立好内部文件与外部文件的联系,这是通过打开文件来实现的。C语言中通过调用文件打开函数来实现,该函数的一般格式为:
fp=fopen(文件名,打开方式);其中:(1)fp为文件指针。(2)fopen是打开文件的函数名,该函数成功打开了一个文件时,就已经建立好了fp与外部文件的联系,如果不能正确打开一个文件,该函数返回空指针(NULL)。(3)“文件名”是合法的文件名字,可以包含盘符、路径、文件主名和扩展名。由于“\”为转义字符的开始符号,因此为了表示“\”字符。返回下一页10.3文件的打开与关闭需要双写。(4)“打开方式”是指该文件是用来读还是用来写,以及要指明该文件是文本文件还是二进制文件,可以使用的打开方式如表10.1所示。10.3.2文件的关闭在文件使用完毕之后,应及时关闭它,C中使用fclose函数来关闭文件,其一般格式为:
fclose(文件指针);关闭文件的作用:(1)刷新缓冲区,即将缓冲区中数据真正写入文件,以避免数据丢失。上一页下一页返回10.3文件的打开与关闭(2)在文件尾部写入文件结束标志。(3)切断内部文件与外部文件的联系,即将“管道”撤销,文件指针不再指向外部文件了。上一页返回10.4文件的读/写建立和打开文件的目的是为了对其进行读/写操作,C语言提供了很丰富的文件读/写操作函数,我们着重介绍字符、字符串以及格式输入/输出等文件操作函数的使用方法。10.4.1读/写单个字符1.向文件写字符将一个字符写到磁盘文件中,其函数的一般调用形式为:
fputc(字符表达式,文件指针);2.从文件中读字符从指定的文件中读入一个字符,其一般的调用形式为:字符型变量=fgetc(文件指针);下一页返回10.4文件的读/写如:ch=fgetc(fp);从fp文件中读入一个字符送给字符型变量ch,如遇到了文件结束,该函数返回文件结束标志EOF(即-1)。对于二进制文件,判断文件是否结束,应使用feof(fp)函数完成。该函数的值为真(1)时,文件结束,为假(0),文件未结束。10.4.2读/写字符串使用fgets函数和fputs函数可以读/写文件中的字符串,它们分别与gets函数和puts函数类似,只是把文件作为操作对象。1.向文件中写入字符串函数的一般调用形式:上一页下一页返回10.4文件的读/写
fputs(字符串,文件指针)与puts不同的是,fputs函数不输出‘\n’。fputs函数调用成功时,返回最后写入的字符,否则返回EOF。2.从文件中读入字符串函数的一般调用形式为:
fgets(字符串变量,读入字符数,文件指针);如:fgets(var_str,n,fp);把从fp文件中读入的字符串存入字符串变量var_str中;当读入了n-1个字符或遇到换行符、文件结束符时,函数停止读入过程。Fgets函数将换行符当做普通字符读入并存于字符串变量中,并在最后自动填入‘\0’字符。Fgets函数调用成功时,返回var_str的值;在出错或遇到文件结束时,返回NULL。上一页下一页返回10.4文件的读/写10.4.3文件的格式化读/写使用fscanf函数和fprintf函数可以实现对文件内容的格式化读写操作,它们分别与scanf函数和printf函数类似,只不过把文件作为操作对象。这2个函数的一般调用格式为:
fscanf(文件指针,格式字符串,输入项表);
fprintf(文件指针,格式字符串,输入项表);这两个函数返回实际读写数据的个数,若无任何数据被读写,返回0.10.4.4块读/写如果需要每次读写一个固定长度的数据块时,可以使用fread函数和fwrite函数完成,其函数的一般调用形式为:上一页下一页返回10.4文件的读/写fread(数据块地址,数据块尺寸,数据块个数,文件指针);fwrite(数据块地址,数据块尺寸,数据块个数,文件指针);fread函数或fwrite函数的返回值为实际读写的块数。成功时,实际读写的块数与指定的“数据块个数”相同,如果不同,可以为0。上一页返回10.5文件的定位文件中有一个位置指针,指向当前读/写的位置。如果顺序读/写一个文件,每次读写一个字符之后,该位置指针自动移动到下一个字符位置。文件的定位,就是由用户来控制这个位置指针。10.5.1回绕如果想使位置指针重新回到文件的开始处,使用rewind函数,其调用形式为:
rewind(文件指针);该函数无返回值。下一页返回10.5文件的定位10.5.2随机定位如果想使位置指针定位在任意位置,可以使用fseek函数。其调用形式为:
fseek(文件指针,位移量,参考点);说明:(1)“参考点”是指在移动位置指针时,以何处为参考位置,实现向前或向后移动。它有3个值;文件开始、当前位置、文件末尾。ANSIC已经对此有定义,如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年爱哭公主测试题及答案
- 2026年奥数班数学测试题及答案
- 2026年国际汉语教师测试题及答案
- 2026年小数与单位换算测试题及答案
- 2026年中国pisa测试题目及答案
- 2026年执纪审查测试题及答案
- 2026年客服心理测试题及答案
- 2026年省实小升初测试题及答案
- 2026年选动物人格测试题及答案
- 2026年全国中级银行从业资格之中级公司信贷考试黑金考题(详细参考解析)
- 2026年普通高等学校招生全国统一考试(北京高考卷)数学试卷
- 2026年河口区卫生类事业单位公开招聘工作人员(24人)笔试参考题库及答案详解
- 2026年福建厦漳泉城际铁路有限责任公司社会招聘34人笔试备考题库及答案详解
- 北师大版三年级下册数学总复习《数与代数》教学课件(新教材)
- 山东省烟台市2025-2026学年高一下学期期中学业水平诊断物理试卷(含答案)
- 铸造车间安全生产守则培训课件
- 2025年福建省厦门市广播电视台(融媒体中心)人员招聘考试试题及答案解析
- 2026 年安全生产月(医院版)人人讲安全、个个会应急 - 排查整治风险隐患课件
- 2026年高考全国I卷英语考试试题及答案
- 2026年广东高中学业水平合格性考试生物试卷试题(含答案详解)
- 2026年幼儿园游戏评价的方法
评论
0/150
提交评论