【经管类】C文件的概念

上传人:Jerm****014 文档编号:50048980 上传时间:2018-08-06 格式:PPT 页数:41 大小:714KB
返回 下载 相关 举报
【经管类】C文件的概念_第1页
第1页 / 共41页
【经管类】C文件的概念_第2页
第2页 / 共41页
【经管类】C文件的概念_第3页
第3页 / 共41页
【经管类】C文件的概念_第4页
第4页 / 共41页
【经管类】C文件的概念_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《【经管类】C文件的概念》由会员分享,可在线阅读,更多相关《【经管类】C文件的概念(41页珍藏版)》请在金锄头文库上搜索。

1、第12章 文件 12.1 C文件的概念 12.2 文件操作函数 12.3应用举例12.1 C文件的概念q C文件的类型vC语言把文件看作是一个字符的序列,即文件是由一个一个 字符组成的字符流。因此C语言将文件也称之为流。即,当 读写一个文件时,可以不必关心文件的格式或结构。v文件是以字符序列形式表示的,但C语言支持两种类型的文 件:文本文件和二进制文件。这两种文件的区别在于存放数 据的方式不同。二进制文件格式:以补码形式存放。二进制文件是把数据 以二进制数的格式存放在文件中的,其占用存储空间较少 。 ASCII码格式:一个字节存放一个字符。 文本文件的每 一个字节存放一个ASCII码,代表一个

2、字符。这便于对字 符的逐个处理,但占用存储空间较多,而且要花费转换时 间。12.1 C文件的概念vC语言对文件的处理一般有两种方法:缓冲文件系 统和非缓冲文件系统。缓冲文件系统:在缓冲文件系统中,系统在对文件进 行读写之前首先在内存区开辟一个称作缓冲区的专用 内存区域。从内存向磁盘写文件时必须先写入缓冲区 ,装满缓冲区后才一起写到磁盘上去;从磁盘读文件 时必须先将一批数据读到缓冲区(充满缓冲区),然 后再从缓冲区将数据逐个送到用户数据区。非缓冲文件系统:在非缓冲文件系统中,文件的处理 不自动开辟确定大小的缓冲区,而是由程序设定缓冲 区。一般地,用缓冲文件系统进行的输入输出称为高 级磁盘输入输出

3、,用非缓冲文件系统进行的输入输出 称为低级(低层)的输入输出。12.1 C文件的概念q文件类型指针v文件类型 文件类型实际上是一个结构体类型,类型名为FILE。 Turbo C将该类型存放在stdio.h 文件中。具体声明如下: typedefstruct short level; /*缓冲区“满”或“空”的程度*/ unsigned flags; /*文件状态标志*/ char fd; /*文件描述符*/ unsigned char hold; /*如无缓冲区不读取字符*/ short bsize; /*缓冲区的大小*/ unsigned char*baffer; /*数据缓冲区的位置*/

4、unsigned char* curp; /*指针,当前的指向*/ unsigne distemp; /*临时文件,指示器*/ short token; /*用于有效性检查*/ FILE;12.1 C文件的概念v文件类型指针 通常定义成FILE类型的指针,称为文件指针。 例如:FILE * fp;12.2 文件操作函数q文件打开函数v在C语言中,使用fopen函数来打开文件,fopen函数的调用格式 为:fopen(“文件名”,“文件使用方式”);其中文件名是指文件的全名称,包括相应的路径、主文件名、 扩展文件名(若有);文件使用方式是指打开文件是为读、写 、追加、以及是二进制文件还是文本文件

5、。o 文件的使用方式及其含义如下:o “r“。 为读打开一个文本文件。以此方式打开的文件只能 用于向计算机输入而不能用作向该文件输出数据,而且该 文件应该已经存在。若指定的文件不存在则会出错。o“w”。 为写打开一个文本文件。以此方式打开的文件只 能用于向该文件写数据(即输出文件),而不能用来向计 算机输入。如果原来不存在该文件,则在打开时新建一个 以指定的名字命名的文件。如果原来已存在一个以该文件 名命名的文件,则在打开时将该文件删去,然后重新建立 一个新文件。12.2 文件操作函数o “a“。 向文本文件尾增加数据。此时该文件必须已存 在,否则将得到出错信息。打开时,位置指针移到文 件末尾

6、。o “r+”、 “w+”、 “a+”。用“r+” 、“w+”、“a+”方式打 开文件既可以用来输入数据,也可以用来输出数据。 用“r+”方式时该文件应该已经存在,以便能向计算机 输入数据。用“w+”方式则新建立一个文件,先向此文 件写数据,然后可以读此文件中的数据。用“a+”方式 打开的文件,原来的文件不被删去,位置指针移到文 件末尾,可以添加,也可以读。 o“rb“、“wb“、“ab“。以读、写、追加的方式打开一 个二进制文件。使用方法同“r“,“w“,“a“。o“rb+“、“wb+“、“ab+“。以读、写、追加的方式打开 一个二进制文件,使用方法同“r+“ “w+“ “a+“。12.2

7、文件操作函数ofopen函数执行后返回一个FILE类型的指针,通常赋 给一个文件指针变量(如fp)。这样文件指针fp就和被打 开的文件联系起来了,其后对文件的读写就可以通过 文件指针fp来进行。 例如:fp=fopen(“f1“,“r“);v 说明: 如果不能实现“打开”的任务,fopen函数将会返回一个出 错信息。此时fopen函数返回一个空指针值NULL。 if (fp=fopen(“file1“,“r“)= = NULL)printf(“不能打开文件n“);exit(0);用以上的方式可以打开文本文件或二进制文件,这是 ANSI C的规定,用同一种缓冲文件系统来处理文本文件 和二进制文件

8、。但目前使用的有些C编译系统可能不完全 提供所有这些功能,有的C版本用“rw”、“wr”、“ar”等。12.2 文件操作函数在向计算机输入文本文件时,将回车换行符转换为一 个换行符,在输出时把换行符转换成为回车和换行两 个字符。使用二进制文件时,不进行这种转换,在内 存中的数据格式与输出到外部文件中的数据格式完全 一致,一一对应。在程序开始运行时,系统自动打开3个标准文件:标 准输入、标准输出、标准出错输出。通常这三个文件 都与终端相联系。12.2 文件操作函数q文件关闭函数v当一个文件使用完毕后应关闭,以防止再被误用。“关 闭”就是使文件指针变量不指向该文件。v用fclose 函数关闭文件。

9、fclose函数调用的格式为: fclose(文件指针); 例如: fclose(fp);vfclose函数调用成功,则返回值为0;否则返回EOF(-1 )。EOF是在stdio.h 文件中定义的符号常量,值为-1。12.2 文件操作函数q读写字符函数v写字符函数(fputc)fputc函数的调用格式为:fputc(字符表达式,文件指针);功能:将字符表达式的值输出到文件指针所指向的文 件中去。其中字符表达式是要输出的字符,它可以是 一个字符常量,也可以是一个字符变量。“文件指针” 是文件的指针变量,“文件指针”指向的文件已经以写 或读写方式打开。如果输出成功,则fputc函数返回输出的字符;

10、如果 输出失败,则返回一个EOF。12.2 文件操作函数v读字符函数(fgetc)fgetc函数的调用格式为:字符变量=fgetc(文件指针);功能:从“文件指针”指定的文件读入一个字符,该文件必 须以读或读写方式打开。fgetc函数的返回值为读入的字符,并赋给字符变量。若调 用fgetc函数读字符时,遇到文件结束符,函数返回文件结 束标志EOF。 若想从一个磁盘文件顺序读入字符并在屏幕上显示出来, 可由以下语句实现: ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); 12.2 文件操作函数q读写字符串函数v读字符串函数(fgets

11、)fgets函数的调用格式为:fgets(字符数组名,读入字符的个数,文件指针);功能:从指定文件读入一个字符串。fgets函数返 回值为字符数组的首地址。注意:fgets函数只能从文件指针指向的文件输入 “读入字符个数1”个字符,然后在最后加一个 0字符,得到的字符串共有“读入字符个数”个 字符。如果在读完“读入字符个数1”个字符之 前遇到换行符或EOF,读入即结束。12.2 文件操作函数v写字符串函数(fputs)fputs函数的调用格式为:fputs(字符串表达式,文件指针);功能:将“字符串表达式”表示的字符串写入到fp指向 的文件中去。fputs(“China“,fp);fputs函

12、数中第一个参数可以是字符串常量、字符数 组名或字符型指针。字符串末尾的0不输出。若函 数fputs调用成功,函数返回值为0;失败时,函数的 返回值为EOF。12.2 文件操作函数q读写数据块函数v读数据块函数(fread)fread函数的调用格式为:fread(指针,数据块大小,数据块数目,文件指针);“指针”是读入数据的存放地址,输入的数据存入该内存 块;“数据块大小”为要读写的字节数;“数据块数目”是要 读多少个“数据块大小”的数据项,即一次读入的字节数为 :“数据块数目”*“数据块大小”个字节;“文件指针”指的 是已经指向为读操作已打开的文件。功能:从“文件指针”指向的文件中读取“数据块

13、数目”个“ 数据块大小”的数据块,存放到“指针”指定的内存中。若函数fread调用成功,则返回值为“数据块数目”值;若 遇到文件结束或出错则返回0。12.2 文件操作函数v写数据块函数(fwrite)fwrite函数的调用格式为:fwrite(指针,数据块大小,数据块数目,文件指针);“指针”是准备输出的数据块的首地址,“数据块大小” 、“数据块数目”的含义同fread函数,“文件指针” 指 的是已经指向为写操作已打开的文件。功能:将“指针”指向的内存中的“数据块数目”*“数据 块大小”个字节内容写入到“文件指针”指向的文件中 。若函数fwrite调用成功,则返回值为“数据块数目”的 值,即写

14、入到文件的数据项个数。如果文件以二进制形式打开,用fread和fwrite函数就 可以读写任何类型的信息。12.2 文件操作函数q格式化读写函数(fprintf函数和fscanf函数)vfscanf函数、fprintf函数与scanf函数、printf函数作用相仿, 只是fprintf和fscanf函数的读写对象不是终端而是磁盘文件。 它们的调用格式为:fscanf(文件指针,格式字符串,输入表列);fprintf(文件指针,格式字符串,输出表列);v用fprintf和fscanf函数对磁盘文件读写,使用方便,容易理解 ,但由于在输入时要将ASCII 码转换为二进制形式,在输出 时又要将二进制

15、形式转换成字符,花费时间比较多。因此, 在内存与磁盘频繁交换数据的情况下,最好不用fprintf和 fscanf函数,而用fread和fwrite函数。fprintf(fp, “%d,%6.2f“,i,t);fscanf(fp, “%d,%f“,12.2 文件操作函数q文件的定位v移动位置指针函数(fseek)fseek函数用来移动文件位置指针到指定的位置,以便从 当前位置读写文件。fseek函数的调用格式为: fseek(文件指针,位移量,基准点);其中位移量以字节为单位,是移动的字节数,是一个长 整型数,ANSI C标准规定在数字的末尾加一个L;基准点 用0、1或2代替,0代表“文件开始”

16、,1代表“当前位置”,2 代表“文件末尾”,基准点也可以用表示符表示,其中 SEEK_SET表示“文件开始”,SEEK_CUR表示“当前位置 ”,SEEK_END表示“文件末尾”。例如,fseek(fp,100L,0); 将位置指针移到离文件头100个字节处fseek(fp,50L,1); 将位置指针移到离当前位置50个字节处 fseek(fp,-10L,2); 将位置指针从文件末尾处向后退10个字节12.2 文件操作函数注意:fseek函数一般用于二进制文件,因为文本文 件要发生字符转换,计算位置时往往会发生混乱。v确定当前位置函数(ftell)ftell函数的功能是得到流式文件中的当前位置,用相 对于文件开头的位移量来表示。 ftell函数的调用格式为:ftell(文件指针);若函数ftell调用成功,其返回值为文件的当前位置( 相对于文件开始的字节数);否则则返回值为-1L。 例如: i=ftell(fp);if(i= = -1

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 企业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号