第十章文件 §12.1C文件概迷 ★文件:存储在外部介质上数据的集合,是操作系 统数据管理的单 ★使拥数实件的目的 1数据文件的改动不引起程序的改动程序与数据分离 2摔胸程浮赐徜悔:数据文件中的数据数据共享 3、程嵐狩的嘯闯攝绩黑掘定长和不寅长) ●流式文件:由一个个字符(宇节)数据顺序组成 今按存储介质: ●普通文件:存储介质文件(磁盘、磁带等) 设备文件:非存储介质(盘、显示器、打印机等) 今按数据的组织形式 ●文本文件:ASCⅡ文件,每个字节存放一个字符的ASCI码 二进制文件:数据抽其在内存中的存储形式原样存放
第十章 文件 §12.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系 统数据管理的单位 使用数据文件的目的 1、数据文件的改动不引起程序的改动——程序与数据分离 2、不同程序可以访问同一数据文件中的数据——数据共享 3、能长期保存程序运行的中间数据或结果数据 文件分类 ❖按文件的逻辑结构: ⚫记录文件:由具有一定结构的记录组成(定长和不定长) ⚫流式文件:由一个个字符(字节)数据顺序组成 ❖按存储介质: ⚫普通文件:存储介质文件(磁盘、磁带等) ⚫设备文件:非存储介质(键盘、显示器、打印机等) ❖按数据的组织形式: ⚫文本文件:ASCII文件,每个字节存放一个字符的ASCII码 ⚫二进制文件:数据按其在内存中的存储形式原样存放
§12.2文件类型指针 ★文件结构体FLE ◆缓冲文件系統为每个正使用的文件在内存开辟文件 傖息区 ◆文件傖息用系統定义的名为FILE的结构体描迷 心FLLE定义在 stdio.h中 typedef struct { short evel:;缓冲区满或空的程度 unsigned flags;∥文件状态标志 char fd;文件描述符 short bsize;缓冲区大小 unsigned char*curp;∥指针,当前的指向 unsigned char *buff;数据缓冲区位置 unsigned istemp;/临时文件,指示器 short token;∥用于有效性检査 FILE
§12.2 文件类型指针 文件结构体FILE ❖ 缓冲文件系统为每个正使用的文件在内存开辟文件 信息区 ❖文件信息用系统定义的名为FILE的结构体描述 ❖FILE定义在stdio.h中 typedef struct { short level; //缓冲区满或空的程度 unsigned flags; //文件状态标志 char fd; //文件描述符 short bsize; //缓冲区大小 unsigned char *curp; //指针,当前的指向 unsigned char *buff; //数据缓冲区位置 unsigned istemp; //临时文件,指示器 short token; //用于有效性检查 }FILE;
★文件类型指针 ☆指针变量说明:FILE“fp 用法: ●文件打开时,系统自动建立文件结构体, 并把指向它的指针返回來。程序通过这个 指针获得大件信息访问文件 大件头闭后。它的文件结构体被释放
文件类型指针 ❖指针变量说明: FILE *fp; ❖用法: ⚫文件打开时,系统自动建立文件结构体, 并把指向它的指针返回来,程序通过这个 指针获得文件信息,访问文件 ⚫文件关闭后,它的文件结构体被释放
§12.3文件的打开与关闭 C文件谢文性打与 文件使用方式 含义 “r/rb”(只读) 为输入打开一个文本/二进制文件 wwb”(只写) 为输出打开或建立一个文本/二进制文件 “a/ab”(追加) 向文本/二进制文件尾追加数据 “r+/rb+”(读写) 为读/写打开一个文本/二进制文件 “w+/wb+”(读写) 为读写建立一个文本二进制文件 “a/b+”(读写)为读/写打开或建立一个文本/二进制文件 ☆函数原型:FIE“ fopen( char name, char "mode 今功能:按指定方式打开文 要打开的文件名 返值:正常打开,为指向 打开失败。为NULL
§12.3 文件的打开与关闭 C文件操作用库函数实现,包含在stdio.h 文件使用方式:打开文件-->文件读/写-->关闭文 件 系统自动打开和关闭三个标准文件: ❖标准输入------键盘 stdin ❖标准输出------显示器 stdout ❖标准出错输出-----显示器 stderr 打开文件fopen ❖函数原型:FILE *fopen(char *name,char *mode) ❖功能:按指定方式打开文件 ❖返值:正常打开,为指向文件结构体的指针; 打开失败,为NULL 要打开的文件名 使用文件方式 例 文件打开与测试 FILE *fp; fp=fopen(“aa.c”,“w”); if(fp==NULL) { printf(“File open error!\n”); exit(0); } 例 FILE *fp; fp= fopen (“c:\zhou\test.dat”,”r”); 例 FILE *fp; char *filename=“c:\zhou\test.dat” “r+/rb+” (读写fp= fopen(filename,”r”); ) “a/ab” (追加) “w/wb” (只写) “r/rb” (只读) “w+/wb+” (读写) “a+/ab+” (读写) 为输入打开一个文本/二进制文件 为输出打开或建立一个文本/二进制文件 为读/写打开一个文本/二进制文件 为读/写建立一个文本/二进制文件 为读/写打开或建立一个文本/二进制文件 向文本/二进制文件尾追加数据 文件使用方式 含义
★文件关闭 fclose ◆作用:使文件指针变量与文件“脱钩”,释放文件结 杓体和文件指针 函数原型: int fclose(FE*fp) ☆功能:关闭f指向的 冷巡值:正常文件打开时返回的文件类型指针
文件关闭fclose ❖作用:使文件指针变量与文件“脱钩”,释放文件结 构体和文件指针 ❖函数原型:int fclose(FILE *fp) ❖功能:关闭fp指向的文件 ❖返值:正常关闭为 文件打开时返回的文件类型指针 0;出错时,非0
§12.4文件的读写 ★字符O: fputc与 fgetc fputc 函数原型: fputc(ch,fp) 功能:把一字符ch写入印指向的文件中 返值:正常,返回ch;出错,为EOF ☆ fgetc 函数原型: fgetc(fp) 功能:从fp指向的文件中读取一字符 ●返值:正常,返回读到的代码值;读到文件尾或 出错,为EOF
§12.4 文件的读写 字符I/O:fputc与fgetc ❖fputc ⚫函数原型:fputc(ch, fp) ⚫功能:把一字符ch写入fp指向的文件中 ⚫返值:正常,返回ch;出错,为EOF ❖fgetc ⚫函数原型:fgetc(fp) ⚫功能:从fp指向的文件中读取一字符 ⚫返值:正常,返回读到的代码值;读到文件尾或 出错,为EOF
★数据块ⅣO: fread与 fwrite 函数原型: fread (buffer, size, count, fp) fwrite(buffer, size, count, fp) 今功能:读/写数据块 ◆返值:成功,返回谈/写的块数;出错或文件尾,返回0 说明 buffer:指向要輸入/崳出教据块的首地址的指针 sie:每个要读/写的数据块的大小(字节数) ● count:要读/写的数据块的个数 fp:要读/写的文件指针 ● fread与 fwrite一敷用于二进制文件的輸入/输出
数据块I/O:fread与fwrite ❖函数原型: fread(buffer, size, count, fp) fwrite(buffer, size, count, fp) ❖功能:读/写数据块 ❖返值:成功,返回读/写的块数;出错或文件尾,返回0 ❖说明: ⚫buffer: 指向要输入/输出数据块的首地址的指针 ⚫size: 每个要读/写的数据块的大小(字节数) ⚫count: 要读/写的数据块的个数 ⚫fp: 要读/写的文件指针 ⚫fread与fwrite 一般用于二进制文件的输入/输出
例 struct student int num; char name 20]; char sex; int age; float score 3 stud 10; or(i=0;i<10;i++) fread ( &studi, sizeof(struct student), 1, fp);
例 struct student { int num; char name[20]; char sex; int age; float score[3]; }stud[10]; for(i=0;i<10;i++) fread(&stud[i],sizeof(struct student),1,fp);
★格式化ⅣO: fprintf-与 fscanf 今函数原型: fprintf(文件指针,格式字符串,输出表列) fscanf(文件指针,格式字符串,输出表列) 心功能:按格式对文件选行ⅣO操作 ☆返值:成功,返回ⅣO的个数;出错或文件尾,返回EOF 例 fprintf(fp,“%d,%6,2r”,t);/将和t按%d,%62格式输出到 fp文件 fscanf(fp,“%d,%F,&i&t;∥若文件中有3,45,则将3送入, 45送入t
格式化I/O:fprintf与fscanf ❖函数原型: fprintf(文件指针,格式字符串,输出表列) fscanf(文件指针,格式字符串,输出表列) ❖功能:按格式对文件进行I/O操作 ❖返值:成功,返回I/O的个数;出错或文件尾,返回EOF 例 fprintf(fp,“%d,%6.2f”,i,t); //将i和t按%d,%6.2f格式输出到 fp文件 fscanf(fp,“%d,%f”,&i,&t); //若文件中有3,4.5 ,则将3送入i, 4.5送入t
§12.5文件的定位 ★几个概念 ◆文件位置指针---指向当前读写置的指针 今写方式 顺序读写:位量指钋蛰宇节位量顺序移动,叫~ ●随机焕写:笕量指针抉要移动到任意位量,叫 ★ rewind函数 ☆函数原型: void rewind(FILE“fp) 今功能:重置大件位置指钋到文件开头 ◆沤值:天
§12.5 文件的定位 几个概念 ❖文件位置指针-----指向当前读写位置的指针 ❖读写方式 ⚫顺序读写:位置指针按字节位置顺序移动,叫~ ⚫随机读写:位置指针按需要移动到任意位置,叫~ rewind函数 ❖函数原型: void rewind(FILE *fp) ❖功能:重置文件位置指针到文件开头 ❖返值:无