文件类型.ppt

上传人:jiups****uk12 文档编号:57058889 上传时间:2018-10-18 格式:PPT 页数:58 大小:301KB
返回 下载 相关 举报
文件类型.ppt_第1页
第1页 / 共58页
文件类型.ppt_第2页
第2页 / 共58页
文件类型.ppt_第3页
第3页 / 共58页
文件类型.ppt_第4页
第4页 / 共58页
文件类型.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《文件类型.ppt》由会员分享,可在线阅读,更多相关《文件类型.ppt(58页珍藏版)》请在金锄头文库上搜索。

1、第11章 文件类型,11.1 文件类型与文件指针 11.2 文件的打开与关闭 11.3 文件的读写与建立 11.4 文件辅助操作 11.5 程序设计举例,11.1 文件类型与文件指针,1. 文本文件和二进制文件,C语言文件把数据看作是一连串的字符(字节)。 C语言文件是一个字符(字节)的序列,是一字符流或字节流,是一种流式文件。根据数据的组织形式,可分为文本文件和二进制文件。 ,文本文件又称为ASCII文件,每一个字节中存放一个ASCII代码, 代表一个字符。 例如,一个整数123, 若用ASCII文件存放,占3个字节的存储单元,1、 2、 3各用一个字节存储。而1、2、3的ASCII码分别为

2、49、50、51,故123用ASCII文件存放时,存放形式为001100010011001000110011。二进制文件是直接用数据的二进制形式存放。例如,对整数123,二进制为0000000001111011,用二进制文件存放,需 2 个字节,存放形式为0000000001111011。,2. 缓冲文件系统和非缓冲文件系统,在缓冲文件系统中,系统自动在内存中为每个正在使用的文件开辟一个缓冲区,文件的存取都是通过缓冲区进行的。缓冲区相当于一个中转站,它的大小由具体的C版本规定,一般为512字节。缓冲文件系统原来用于处理文本文件。 在非缓冲文件系统中,系统不为所打开的文件自动开辟缓冲区, 缓冲区

3、的开辟由程序完成。非缓冲文件系统原来用于处理二进制文件。,ANSI C不再采用非缓冲文件系统,而只采用缓冲文件系统,在处理二进制文件时,也通过缓冲文件系统进行。ANSI C通过扩充缓冲文件系统,使缓冲文件系统既能处理文本文件, 又能处理二进制文件。,3. 内部文件和外部文件存放在外部介质上的文件称为外部文件,通过文件名标识。 C程序中的文件称为内部文件,用文件指针来描述。程序中要实现对文件的处理,先必须在内部文件与外部文件之间建立联系,打开文件;然后方可对文件进行操作。文件最基本的操作是读写操作;操作完成应当切断内部文件与外部文件之间的联系,关闭文件。 对文件进行的所有操作通过C编译系统提供的

4、标准函数完成,这些函数的信息包含在头文件“stdio.h”中。,11.1.2 文件类型,文件类型是一特殊的结构体类型,一般命名为FILE。 用户可以直接使用FILE来定义文件类型变量,存放要处理的文件的基本信息。 各种C编译系统的FILE定义可以不同,但均包含进行文件操作所需的各种信息。,下面是TURBO C中对FILE的定义: typedef struct short level; unsigned flags; char fd; unsigned char hold; short bsize; unsigned char *buffer; unsigned char *curp; unsi

5、gned istemp; short token; FILE;,11.1.3 文件指针变量,对文件的描述,往往通过指向文件的文件指针变量来进行。文件指针变量定义的形式为: FILE *文件指针变量; 例如: FILE *fp, *fpa10; 定义了文件指针变量fp和文件指针变量数组fpa。文件指针变量fp及文件指针变量数组fpa的每个分量可以指向一个文件的信息。,11.2 文件的打开与关闭,11.2.1 文件的打开,文件的打开用fopen( )函数完成,调用方式通常为: fp=fopen(文件名,文件使用方式);,文件使用方式共有 12 种, 用特定字符形成的字符串来描述。 (1) r方式,

6、 以只读方式打开文本文件。 这时从文件中读数据到内存,故要求文件已经存在。 用r方式打开的文件只能读,不能同时写。 (2) w方式, 以只写方式打开文本文件。 这时将内存中的数据写入到磁盘文件中。若文件不存在, 建立新文件;若文件存在,则刷新文件,重新建立。用w方式打开的文件只能写,不能同时读。,(3) a方式, 为文本文件的追加方式。 用于向已存在的文件尾部追加新的数据,而文件中原来的数据不被破坏。 (4) r+、w+、a+方式,打开的文本文件既能读又能同时写。 r+方式: 在读的同时可以进行写。读写位置指针在头部,若原来存在此文件,则以覆盖方式写。 w+方式: 在写的同时可以进行读。 由于

7、打开文件时,文件原来的内容被刷新,一般不要在打开文件后立即读文件。 a+:在追加的同时可以进行读。读文件时,从文件首部开始;写文件时,在文件尾部追加。,(5)rb、wb、ab、rb+、wb+、ab+是使用二进制文件相应的六种方式。 打开文件可得到三个信息: 要访问的文件名。 使用文件的方式。 哪一个指针变量用于指向被打开的文件。 打开成功, 返回文件指针(文件信息区的起始地址); 不能打开, 返回空指针。,例如: (1) fp=fopen(student.dat, w); 以只写方式打开当前盘当前目录下的文本文件中的学生数据文件, 用户可将数据写入此磁盘文件中。 (2)fp=fopen(c:

8、cjcjc.dat, student.dat, r); 以只读方式打开C盘成绩子目录下C语言成绩文件, 用户可将文件中数据读出来。但此文件必须存在,否则会出错。,(3) fp=fopen(PRG,ab+); 打开二进制文件PRG, 在读的同时也可以写。 为确保文件的读写操作,对文件是否已正常打开往往加上if语句进行控制。例如: if(fp=fopen(student.dat,w)=NULL) printf(不能打开文件!); exit(0); ,说明: (1) 不是所有编译系统均提供以上 12 种文件使用方式。 (2) 用r、rb方式打开的文件必须已经存在。(3) 用w、wb方式打开的文件,可

9、以存在也可以不存在。不存在时,则新建文件;存在时,重新建立, 原文件内容不被保留。(4) 在读写文本文件时,对回车换行符要进行转换, 读时回车换行符转换成换行符,写时回车换行符转换成回车、换行两个字符。对二进制文件,不进行这种转换。,(5) 程序运行时, 系统自动打开标准输入stdin、 标准输出stdout、标准出错输出stderr三个标准文件。 stdin、stdout、stderr由系统自动定义,可直接使用。(6) 标准设备文件可与普通文件一样操作, 但将产生特殊效果。如写到打印机,将在程序中实现打印输出控制。,11.2.2 文件的关闭,文件在使用完后,应及时关闭。文件的关闭用fclos

10、e( )函数完成,调用方式为: fclose(文件指针变量);关闭文件将使文件指针变量与文件名脱钩,即指针变量不再指向该文件。文件关闭后不能再用该指针变量对文件进行操作,该指针变量可再指向其它文件。 顺利执行了关闭操作,将返回函数值0。如返回一个非0值, 则表示文件关闭出错。,11.3 文件的读写与建立,11.3.1 字符级数据的读和写,1. 字符级数据的读函数原型: int fgetc (FILE *fp); 功能:从文件指针fp所指向的文件中读取一个字节的代码值(字符),作为函数的返回值。正常情况下为一个字符,读到文件尾或出错时为EOF(-1)。,说明: (1) 读完一字节数据后, 文件指

11、针自动后移。 (2) getc和fgetc是等价的宏。 (3) 若文件指针为stdin, 则fgetc(stdin)功能与getchar( )等价。,2. 字符级数据的写函数原型: int fputc(int ch, FILE *fp); 功能: 将ch写入文件指针fp所指向的文件中。写入成功返回字符值, 不成功返回值EOF。说明: (1) 写入数据前, 文件指针自动后移。 (2) puttc和fputc是等价的宏。 (3) 若文件指针为stdout, 则fputc(stdout)功能与puttchar( )等价。 (4) 文件的建立通过写操作完成。,11.3.2 字级数据的读和写,1. 字级

12、数据的读 函数原型: int getw(FILE *fp); 功能: 从文件指针fp所指文件中读一个字的数据(整数),并以它作为函数的返回值。 说明: 非标准C所提供函数。,2. 字节数据的写函数原型: int putw(int w, FILE *fp); 功能: 写一个字的数据(整数)到文件指针fp所指的文件中,并以它作为函数的返回值。 说明: 非标准C所提供函数。,11.3.3 字符串级数据的读和写,1. 字符串数据的读函数原型: char *fgets(char *str, int len, FILE *fp); 功能: 从文件指针fp所指的文件中读入一个长度为len-1的字符串,送入到

13、str所指内存地址中。返回值为str的首地址,若读到文件尾或出错,则返回值为NULL。,说明: (1) 字符串读入后在最后加结尾符0。 (2) 将读到的回车符作为字符存储。 这点与gets( )函数不同, gets( )把读到的回车符转换成结尾符。 (3) 字符串数据的读和写亦称“行处理”。,2. 字符串数据的写函数原型: int fputs (char *str, FILE *fp); 功能: 将str指针所指字符串写入到文件指针fp所指文件中。若该函数成功调用, 返回函数值0,否则返回函数值非0。,11.3.4 数据块数据的读和写,1. 数据块数据的读函数原型: unsigned frea

14、d(void *buffer,unsigned size,unsigned count,FILE *fp); 功能:从文件指针fp所指的文件中读取count个大小为size字节的数据块到buffer指针所指的内存中。读到的数据可能含有各种不同的类型。若该函数成功调用,返回count的值。,例如: int a100; fread(a,2,100,fp);/*从fp读取100个大小为2字节的数据块(整数)到数组a中*/,2. 数据块数据的写函数原型: unsigned fwrite(void *buffer, unsigned size, unsigned count, FILE *fp); 功能

15、:向文件指针fp所指的文件写入由buffer指针所标识的count个大小为size字节的数据块。若该函数成功调用, 返回count的值。例如: int a100; fwrite(a, 2, 100, fp); /*将整个数组a写入文件fp中*/,11.3.5 格式化数据的读和写,函数原型: int fscanf(FILE *fp, 格式字串,变量地址表); int fprintf(FILE *fp, 格式字串,变量表); 使用fscanf( )和fprintf( )函数对磁盘文件进行读和写,相当方便。但是输入时需将ASCII码转换为二进制,输出时需将二进制转换成ASCII码, 需花费较多的时间,故一般较少采用,而是使用fread( )和fwrite( )函数。,例如: int i, j; float f; fscanf(fp, %d%d%f, &i, &j, &f); /*从fp中按指定格式读取数据至i、 j、 f中*/,11.3.6 文件的建立步骤对文件操作前必须打开文件,文件打开后才可进行读写操作,操作完成应关闭文件。 文件的建立步骤如下: (1) 以写方式打开文件。 (2) 将数据写入文件, 多个数据反复写入。 (3) 写完数据关闭文件。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

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