版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第10章 文件,教学要求:通过本章的教学,读者必须掌握C语言文件的基本知识及其使用方法。学会文件的操作,并熟悉几个常用的文件处理函数。 教学提示:文件是C语言中的一个重要的逻辑概念,操作复杂,是编制应用程序必须掌握的知识。本章主要介绍文件的相关知识及其使用方法,重点介绍文件的编制和读写方法,具体的是对文件操作函数的使用。 教学内容:本章首先介绍了文件的类型,然后讲解了文件的打开与关闭操作,通过若干例子详细讲解了与文件相关的读写函数的具体使用方法。,第10章 文件,10.1文件概述 10.1.1 文件及文件名 文件(file)是程序设计中一个重要的概念。所谓“文件”一般指存储在外部介质上数据的集
2、合。一批数据是以文件的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后再从该文件中读取数据。要向外部介质上存储数据也必须先建立一个以文件名为标识的文件,才能向它输出数据。 为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件名.扩展名。文件命名规则,遵循操作系统的约定。,第10章 文件,10.1.2 文件分类 根据用户的角度,文件可分为普通文件和设备文件两种。 根据文件的内容,可分为程序文件和数据文件,程序文件又可分为源文件、目标文件和可执行文件。 根据文件的组织形式,可分为顺序存
3、取文件和随机存取文件。 根据文件的存储形式,可分为ASCII码文件和二进制文件。 ASCII文件又称文本(text)文件,它的每一个字节放一个ASCII代码,代表一个字符。 二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放。,第10章 文件,10.1.3 构成文件的基本单元与流式文件 一个C语言文件是一个字节流或二进制流。它把数据看作是一连串的字符(字节),而不考虑记录的界限。换句话说,C语言中文件并不是由记录(record)组成的(这是和PASCAL或其他高级语言不同的)。在C语言中对文件的存取是以字符(字节)为单位的。输入输出的数据流的开始和结束仅受程序控制而不受物理符
4、号(如回车换行符)控制。也就是说,在输出时不会自动增加回车换行符以作为记录结束的标志,输入时不以回车换行符作为记录的间隔,我们把这种文件称为流式文件。C语言允许对文件存取一个字符,这就增加了处理的灵活性。,第10章 文件,10.1.4 ANSI C的缓冲文件系统 缓冲文件系统是指系统自动地在内存区为每一个正在使用的文件名开辟一个缓冲区。从内存向磁盘输出数据必须先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘去。如果从磁盘向内存读入数据,则一次从磁盘文件将一批数据输入到内存缓冲区(充满缓冲区),然后从缓冲区逐个地将数据送到程序数据区(给程序变量)。,第10章 文件,所谓“非缓冲文件系统”是指系统
5、不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。在UNIX系统下,用缓冲文件系统来处理文本文件,用非缓冲文件系统处理二进制文件。用缓冲文件系统进行的输入输出又称为高级(或高层)磁盘输入输出(高层I/O),用非缓冲文件系统进行的输入输出又称为低级(低层)输入输出系统。1983年ANSI C标准决定不采用非缓冲文件系统,而只采用缓冲文件系统。即既用缓冲文件系统处理文本文件,也用它来处理二进制文件。也就是将缓冲文件系统扩充为可以处理二进制文件。,第10章 文件,10.2 文件的打开与关闭 10.2.1 缓冲型文件类型 缓冲文件类型指针 缓冲文件系统中,关键的概念是“文件指针”。每个被使用的
6、文件都在内存中开辟一个区,用来存放文件的有关信息(如文件的名字、文件状态及文件当前位置等)。这些信息是保存在一个结构体类型的变量中的。该结构体类型是由系统定义的,取名为FILE。有的C语言版本在stdio.h文件中有以下的文件类型定义: typedef struct int _fd,_Fd; /*文件号*/ int _cLEFt; /*缓冲区中剩下的字符*/ int _modE; /*文件操作模式*/ int _nExtc; /*下一个字符位置*/ int _buFF; /*文件缓冲区模式*/ FILE;,第10章 文件,缓冲型文件的打开与关闭 缓冲型文件的打开fopen函数 功能:ANSI
7、C规定了标准输入输出函数库,用fopen函数来实现打开文件。 语句形式:fopen函数的调用方式通常为: FILE*fp; fp=fopen(文件名,使用文件方式); 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名,“文件名”是字符串常量或字符串数组。“使用文件方式”是指文件的类型和操作要求。,第10章 文件,使用文件方式,第10章 文件,缓冲型文件的关闭fclose函数 在使用完一个文件后应该关闭它,以防止它再被误用。“关闭”就是使文件指针变量不指向该 文件,也就是文件指针变量与文件“脱钩”,此后不能再通过该指针对原来与其相联系的文件进行读写操作。
8、除非再次打开,使该指针变量重新指向该文件。 用fclose函数关闭文件。fclose函数调用的一般形式为 fclose(文件指针); 例如: fclose(fp); 用fopen()函数打开文件时所带回的指针赋给了 fp,该语句把该文件关闭。即fp不再指向该文件。,第10章 文件,10.2.2 非缓冲型文件类型 缓冲输入输出系统又称高级磁盘输入输出系统。非缓冲输入输出系统又称为低级磁盘输入输出系统,系统不为这类文件自动提供文件缓冲区,程序设计者必须自己设定一个缓冲区并考虑如何使用它们。非缓冲文件系统提供了一些输入输出函数,用于对这类文件进行输入输出操作。 缓冲文件系统(高级I/O系统)是有文件
9、指针的,通过文件指针访问文件,而非缓冲文件系统(低级磁盘I/O系统)则没有文件型指针,不是靠文件指针来访问文件,而是用一个整数代表一个文件(相当于FORTRAN等语言的“文件号”),这个整数称为“文件说明符”。,第10章 文件,open函数 功能:用来打开一个非缓冲文件。 语句形式: open(文件名,打开方式) 说明:打开方式指该文件打开后的工作方式,即读/写方式。,第10章 文件,close函数 功能:用来关闭已打开的文件。 语句形式: close(fd); 说明:fd为整型变量,它是“文件说明符”(即文件号)。在打开文件时,open函数返回一个整数,这就是“文件说明符”(文件号)。在未关
10、闭此文件之前,此文件说明符与该文件相联系,或者说它代表一个确定的文件。执行close函数后,文件号释放,它不再与一个确定的文件相联系。它可以再被用来与另一文件相联系。文件号是由系统在打开文件时分配的,而不是由程序设计者指定的。每一个C语言编译系统规定了可以同时打开的文件时的最大数目。,第10章 文件,10.3 文件的读写函数 文件打开后,最常见的操作就是读取和写入。C语言提供多种对文件的读取和写入的函数,这里主要介绍四种常用文件的读写操作函数,它们都是在头文件stdio.h定义的: 按字符读写的函数fputc、fgetc; 按字符串读写的函数fgets、fputs; 按格式要求读写的函数fpr
11、intf、fscanf; 按数据块读写的函数fread、fwrite。,第10章 文件,10.3.1 字符读写的函数 fputc函数 函数fputc的作用是向文件写入一个字符。 用法:int fputc (int c , FILE *fp); 功能:输出一个字符到fp指定的文件中,成功是返回所写字符,出错时返回EOF。 例如:fputc(A,fp); fp为一个文件类型指针变量,上式将字符常量A (也可以是字符型变量)写入文件当前位置,并且使文件位置指针下移一个字节。如果写入操作成功,返回值使该字符,否则返回EOF。,第10章 文件,fgetc函数 函数fgetc的作用是从一个文件中读取一个字
12、符。 用法:int fgetc(FILE *fp); 功能:从fp指定的文件中读取下一个字符。成功时返回读取的字符,出错或至文件结束时返回EOF。 例如:a=fgetc(fp); fp为一个文件类型指针变量,函数fgetc(fp)不仅返回文件当前位置的字符将其赋给变量a,并且使文件位置指针下移一个字符。如果遇到文件结束,则返回值为文件结束标志EOF,该功能常用于判定是否已经到了文件的末尾。,第10章 文件,按字符串读写的函数 fputs函数 函数fputs的作用是向文件写入一个字符串。 用法:int fputs(char *str , FILE *fp); 功能:把字符串str输出到fp指定的
13、文件中,写入文件成功,函数返回0,出错时返回EOF。 提示: 字符串的结束标志0不写入。 例如:fputs(Hello,fp); fp为一个文件类型指针变量,上式将字符串中的字符H、e、l、l、o写入文件指针的当前位置。,第10章 文件,fgets函数 函数fgets的作用是从一个文件中读取一个字符串。 用法:char *fgets(char *buf , int n , FILE *fp); 功能:从fp指定的文件中读取一个长度为n-1的字符串,存入起始地址为buf的内存空间中。 例如:fgets(str , n , fp); 其作用是从fp指向的文件的当前位置开始读取n-1个字符,并加上字
14、符串结束标志0一起放入字符数组str中。如果从文件读取字符时遇到换行符或文件结束标志EOF,读取结束,函数返回值为字符数组str的首地址。,第10章 文件,10.3.3 按格式要求读写的函数 fprintf函数 函数fprintf的作用与fprintf相似,只是输出对象不是标准输出设备而是文件(可以将printf看作fprintf的一个特例,它的输出对象是唯一的标准输出文件stdout,即显示器),即按照格式要求将数据写入文件。 用法:int fprintf(FILE *fp , char *format , argument , ); 功能:将格式串format中的内容原样输出到所指定的文件
15、中,每遇到一个%,就按规定的格式,依次输出一个表达式argument的值到fp所指定的文件中,返回成功输出的项数,出错时返回EOF。 例如:fprintf(fp , %ld,%s,%5.1f,num,name,score); 它的作用时将变量num、name、score按照%ld、%s、%5.1f的格式写入fp指向的文件的当前位置。比较一下语句printf(%ld,%s,%5.1f,num,name,score);可见fprintf函数只是在printf的基础上增加了一个文件指针。,第10章 文件,fscanf函数 函数scanf通过标准输入设备读取数据。同样,函数fscanf按照格式要求从文
16、件中读取数据。 用法:int fscanf(FILE *fp , char *format , address , ); 功能:从fp所指定的文件中按format规定的格式输入数据,并把输入的数据依次存入对应的地址address中,返回输入数据个数。 例如:fscanf(fp, %ld,%s,%5.1f, 它的作用是从fp指向的文件的当前位置开始,按照%ld、%s、%5.1f的格式取出数据,赋给变量num、name和score。,第10章 文件,10.3.4 按数据块读写的函数 fwrite函数 函数fwrite的作用是将成批的数据块写入文件。 用法:int fwrite(void *buf
17、, int size , int n , FILE *fp); 功能:将buf指向的内存区中长度为size的n个数据写入fp文件中,返回写到fp文件中的数据项个数。 例如:已知struct student类型的数组stu20,则语句fwirte(从结构体数组元素stu1存放的地址开始,以一个结构体struct student类型变量所占字节数为一个数据块,共写入文件类型指针fp指向的文件2个数据块,即stu1、stu2的内容写入文件。如果操作成功,函数的返回值为2。,第10章 文件,fread函数 函数fread的作用是从文件中读出成批的数据块。 用法:int fread(void *buf
18、, int size , int n , FILE *fp); 功能:从fp文件中读取长度为size的n个数据项,放到buf指向的内存区。成功是返回所读的数据项个数,遇到文件结束或出错时返回EOF。 例如:已知stu时一个结构体struct student变量,则fread(从文件类型指针fp指向的文件当前位置开始,读取1个数据块,该数据块为结构体struct student类型变量所占子结束,然后将读取的内容放入变量stu中。 注意:fwrite和fread函数读写文件时,只有使用二进制方式,才可以读写任何类型的数据。最常用与读写数组和结构体类型数据。,第10章 文件,10.3.5 文件的其他常用函数 feof函数 用法:int feof(FILE *fp); 功能:检测fp所指定的文件是否遇到文件结束标志EOF,遇到文件结束符返回非零值否则返回0。 rewind函数 用法:void rewind(FILE *fp); 功能:把fp文件的位置指针重新定位到文件的开始位置。,第10章 文件,fseek函数 用法:int fseek(FILE *fp , long offset , i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水稻二化螟防治技术操作规程
- 门店环境卫生清洁管理标准
- 季度安全专题会议制度会议纪要要求
- 专项安全技能操作规程手册
- 重点工艺环节安全操作规程
- 门店突发急救处理预案规范
- 亚健康状态中医辨证问诊话术
- 应急物资储备与调拨管理办法
- 淋巴排毒刮痧理疗操作指引手册
- 安乃达-市场前景及投资研究报告-AI+电驱动战略多元业务场景落地推进全球化战略
- 人教版高一年级下学期期末考试数学试卷与答案解析(共五套)
- 《研学旅行课程设计》课件-研学课程方案设计
- MBA会计学课程-会计学的基本原理
- 歌曲《我会等》歌词
- 肩关节X线检查
- 园林植物病虫害-电子教案
- 2023年山东省国有资产投资控股有限公司招聘笔试参考题库含答案解析
- 酒店明住宿清单(水单)
- 2023年副主任医师(副高)-疾病控制(副高)考试高频试题(历年真题)带答案
- GB/T 16731-2023建筑吸声产品的吸声性能分级
- GB/T 3049-2006工业用化工产品铁含量测定的通用方法1,10-菲啰啉分光光度法
评论
0/150
提交评论