[IT认证]第10章文件.ppt
IT认证认证第第10章文件章文件7/10/202227/10/202237/10/202247/10/202257/10/202267/10/20227 二进制文件二进制文件是一种是一种字节字节序列,序列,没有字符变换没有字符变换按照数据在内存中的存储形式存储到文件按照数据在内存中的存储形式存储到文件如整数如整数127127,在内存占,在内存占2 2个字节,为个字节,为00000000011111110000000001111111,则文件中也存储为,则文件中也存储为00000000011111110000000001111111,占,占2 2个字节个字节 文本文件文本文件/ASCII/ASCII码文件码文件是一种是一种字符字符序列序列文件中文件中存储每个字符的存储每个字符的ASCIIASCII码码如整数如整数127127在文件中占在文件中占3 3个字节,分别存放这个字节,分别存放这3 3个字个字符的符的ASCIIASCII码,即码,即4949,5050,5555数据必须按照存入的类型读出,才能恢复其本来的面貌数据必须按照存入的类型读出,才能恢复其本来的面貌7/10/20228无专门的语句,利用库函数对文件进行操作无专门的语句,利用库函数对文件进行操作 对文件进行操作的步骤:对文件进行操作的步骤: 关闭关闭 处理处理 打开打开 7/10/20229文件结构体文件结构体FILEFILEtypedef struct int _fd; /文件号文件号 int _cleft; /缓冲区中剩下的字符数缓冲区中剩下的字符数 int _mode; /文件操作方式文件操作方式 char *_next; /文件当前读写位置文件当前读写位置 char *_buff; /文件缓冲区位置文件缓冲区位置FILE;由系统定义的名为由系统定义的名为FILEFILE的结构体描述的结构体描述7/10/202210FILE *变量名;变量名;(FILEFILE定义在定义在stdio.hstdio.h中)中)文件类型指针的用法:文件类型指针的用法:1、文件打开时、文件打开时 系统系统自动自动建立文件结构体,并把建立文件结构体,并把指向它的指针指向它的指针返返回,程序通过这个指针获得文件信息回,程序通过这个指针获得文件信息,访问文件。访问文件。2、文件关闭后、文件关闭后文件结构体被释放。文件结构体被释放。7/10/202211FILE FILE * *fopenfopen(const char (const char * *namename,char ,char * *modemode) )函数原型:函数原型:功能:功能:按指定方式打开文件按指定方式打开文件返回值:返回值:正常打开正常打开 指向文件结构体的指针指向文件结构体的指针打开失败打开失败 为为NULL要打开的文件名要打开的文件名使用文件方式使用文件方式7/10/2022127/10/202213v 文件的打开方式文件的打开方式mode:对应二进制文件对应二进制文件对应文本文件对应文本文件“r” 只读只读 必须是已存在的文件。必须是已存在的文件。“w” 只写只写 不论该文件是否存在,都新建一个文件。不论该文件是否存在,都新建一个文件。“a” 追加追加 向文本文件尾增加数据,该文件必须存向文本文件尾增加数据,该文件必须存在在“r+” 读写读写 打开一个已存在的文件,用于读写。打开一个已存在的文件,用于读写。 “w+” 读写读写 建立一个新文件,可读可写。建立一个新文件,可读可写。“a+” 读写读写 向文件尾追加数据,也可读。向文件尾追加数据,也可读。 “rb” “wb”“ab”“rb+”“wb+”“ab+”7/10/202214例例 FILE *fp; char *filename=c:fbtest.dat fp= fopen(filename, r); 例例 文件打开与测试文件打开与测试 FILE *fp; fp=fopen(aa.c, w); if(fp=NULL) printf(File open error!n); exit(0); 例例 FILE *fp; fp= fopen (c:fbtest.dat, r); 7/10/202215作用作用: 文件指针变量与文件文件指针变量与文件“脱钩脱钩”,释放文,释放文件结构体和文件指针。件结构体和文件指针。函数原型:函数原型:功能:功能:关闭关闭fp指向的文件指向的文件int fclose(FILE *fp)返回值:返回值:正常关闭为正常关闭为0;出错时出错时,非非0注意:注意: 文件用完一定关闭,否则将出现如下问题文件用完一定关闭,否则将出现如下问题 1、数据丢失、数据丢失 2、影响其他文件的打开、影响其他文件的打开 7/10/2022167/10/202217为什么要判断文件打开是否成功呢?为什么要判断文件打开是否成功呢?7/10/202218函数函数feof()检查是否到达文件尾,检查是否到达文件尾,当文件位置指针指向文件尾时,返当文件位置指针指向文件尾时,返回非回非0值,否则返回值,否则返回0值值7/10/2022197/10/202220为什么在输出第为什么在输出第128个字符的个字符的ASCII码值后又输出了一个码值后又输出了一个-1呢?呢?使用函数使用函数feof()时,仅当读到文件结束符时,仅当读到文件结束符时才能判断出到达文件尾,而文件结束符是时才能判断出到达文件尾,而文件结束符是一个值为一个值为-1的不可打印的控制字符的不可打印的控制字符if (!iscntrl(ch) 7/10/2022217/10/2022227/10/202223fscanf(fp, %d,%6.2f, &i, &t); 第第1个参数为文件指针,第个参数为文件指针,第2 个参数为格式控制参数,个参数为格式控制参数,第第3 个参数为地址参数表列个参数为地址参数表列fprintf(fp, %d,%6.2f, i, t); 第第1个参数为文件指针,第个参数为文件指针,第2 个参数为格式控制参数,个参数为格式控制参数,第第3 个参数为输出参数表列个参数为输出参数表列7/10/202224将平均分作为将平均分作为STUDENT结构体的成员,使函数的结构体的成员,使函数的接口更简洁接口更简洁7/10/2022257/10/2022267/10/2022277/10/2022287/10/2022297/10/2022307/10/2022311.fread函数函数 调用形式:调用形式: fread(buffer,size,count,fp);缓冲区首地址缓冲区首地址 数据字节数数据字节数 数据个数数据个数 文件指针文件指针函数用于二进制文件函数用于二进制文件调用形式:调用形式: 2.fwrite函数函数fwrite(buffer,size,count,fp);7/10/2022327/10/2022337/10/2022347/10/2022357/10/202236