
第十四章文件 §14.1C文件概述 ★文件:存储在外部介质上数据的集合,是操作系统 数据管理的单位 使用数据文件的目的 1、数据文件的改动不引起程序的改动 程序与数据分离 2、 不同程序可以访问同一数据文件中的数据—数据共享 3、能长期保存程序运行的中间数据或结果数据 ★文件分类 按数据的组织形式: ●文本文件:ASCⅡ文件,每个字节存放一个字符的ASCⅡ码 ●二进制文件:数据按其在内存中的存储形式原样存放
第十四章 文件 §14.1 C文件概述 文件:存储在外部介质上数据的集合,是操作系统 数据管理的单位 文件分类 ❖按数据的组织形式: ⚫文本文件:ASCII文件,每个字节存放一个字符的ASCII码 ⚫二进制文件:数据按其在内存中的存储形式原样存放 使用数据文件的目的 1、数据文件的改动不引起程序的改动——程序与数据分离 2、不同程序可以访问同一数据文件中的数据——数据共享 3、能长期保存程序运行的中间数据或结果数据

文本文件特点: 存储量大、速度慢、便于对字符操作 如int型数10000 ASCI形式 0011000100110000001100000011000000110000 0010011100010000 0010011100010000 内存存储形式 进制形式 二进制文件特点: 存储量小、速度快、便于存放中间结果
如 int型数10000 0010011100010000 内存存储形式 0010011100010000 二进制形式 0011000100110000001100000011000000110000 ASCII形式 文本文件特点: 存储量大、速度慢、便于对字符操作 二进制文件特点: 存储量小、速度快、便于存放中间结果

★文件处理方法 必缓冲文件系统:高级文件系统,系统自动为正在使用 的文件开辟内存缓中区 必非缓冲文件系统:低级文件系统,由用户在程序中为 每个文件设定缓中区 程序 输入文件缓冲区 缓冲文件系统: 指令☒ 磁盘文件 非缓冲文件系统: 程序数据区 於数据区 磁盘 缓冲输出夹裤缓冲区
文件处理方法 ❖缓冲文件系统:高级文件系统,系统自动为正在使用 的文件开辟内存缓冲区 ❖非缓冲文件系统:低级文件系统,由用户在程序中为 每个文件设定缓冲区 磁盘文件 输出文件缓冲区 输入文件缓冲区 程序数据区 a 缓冲文件系统: 缓冲区 指令区 程序 用户数据区 磁盘 非缓冲文件系统:

§14.2文件类型指针 ★文件结构体FLE 缓中文件系统为每个正使用的文件在内存开辟文件信 息区 文件信息用系统定义的名为FLE的结构体描述 FILE定义在stdio.h中 typedef struct int fd; /文件号 int cleft; /缓冲区中剩下的字符数 int mode; 文件操作方式 char next; 文件当前读写位置 char*buf任,/文件缓冲区位置 FILE:
§14.2 文件类型指针 文件结构体FILE ❖ 缓冲文件系统为每个正使用的文件在内存开辟文件信 息区 ❖文件信息用系统定义的名为FILE的结构体描述 ❖FILE定义在stdio.h中 typedef struct { int _fd; //文件号 int _cleft; //缓冲区中剩下的字符数 int _mode; //文件操作方式 char *_next; //文件当前读写位置 char *_buff; //文件缓冲区位置 }FILE;

★文件类型指针 指针变量说明:FILE*p; 必用法: ●文件打开时,系统自动建立文件结构体,并把指向它的指针 返回来,程序通过这个指针获得文件信息,访问文件 ●文件关闭后,它的文件结构体被释放 文件名 文件使用 C程序 方式 操作系统 文件类型指针 磁盘
文件类型指针 ❖指针变量说明: FILE *fp; ❖用法: ⚫文件打开时,系统自动建立文件结构体,并把指向它的指针 返回来,程序通过这个指针获得文件信息,访问文件 ⚫文件关闭后,它的文件结构体被释放 文件名 文件使用 方式 文件类型指针 C程序 操作系统 磁盘

§14.3文件的打开与关闭 文件使用方式 含义 r/rb”(只读) 为输入打开一个文本/二进制文件 件 “w/wb”(只写) 为输出打开或建立一个文本/二进制文件 “a/ab”(追加) 向文本/二进制文件尾追加数据 “r+/rb+”(读写) 为读/写打开一个文本/二进制文件 “w+/wb+”(读写) 为读/写建立一个文本/二进制文件 a+/ab+”(读写) 为读/写打开或建立一个文本/二进制文件 冬函数原型:FILE*fopen(chay e,char *mode) 冬功能:按指定方式打开要打开的文件名 冬返值:正常打开,为指 包含文件的绝对路径或相对路径; 开失败,为NULL
§14.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:\\fengyi\\bkc\\test.dat”,”r”); 例 FILE *fp; char *filename=“c:\\fengyi\\bkc\\test.dat” fp= fopen(filename,”r”); “r+/rb+” (读写) “a/ab” (追加) “w/wb” (只写) “r/rb” (只读) “w+/wb+” (读写) “a+/ab+” (读写) 为输入打开一个文本/二进制文件 为输出打开或建立一个文本/二进制文件 为读/写打开一个文本/二进制文件 为读/写建立一个文本/二进制文件 为读/写打开或建立一个文本/二进制文件 向文本/二进制文件尾追加数据 文件使用方式 含义

【例】创建一个名为a1.txt的文件。 #include main() FILE *fp; fp=fopen("al.txt","w") } 当前目录中创建了一个名为a1.txt的文件 【例】在D盘的f01文件夹中创建一个名为a1.txt的文件。 #include main( FILE *fp; fp=fopen("d:\fol\al.txt","w"); 该程序运行时,会报错。 fopen("d:\\fol\\al.txt","w"); 注意: 由于反写杠是转义字符的标志,故文件路径中的普通反斜杠,要用两个 反斜杠表示
【例】创建一个名为a1.txt的文件。 #include main() { FILE *fp; fp=fopen("a1.txt","w"); } 当前目录中创建了一个名为a1.txt的文件 【例】在D盘的f01文件夹中创建一个名为a1.txt的文件。 #include main() { FILE *fp; fp=fopen("d:\f01\a1.txt","w"); } 该程序运行时,会报错。 注意: 由于反写杠是转义字符的标志,故文件路径中的普通反斜杠,要用两个 反斜杠表示。 fopen("d:\\f01\\a1.txt","w");

★文件关闭fclose 冬作用:使文件指针变量与文件“脱钩”,释放文件结构 体和文件指针 函数原型:int fclose(FILE*fp 必功能:关闭fp指向的文砂 必返值:正常关月 文件打开时返回的文件类型指针 缓冲文件系统: 不关闭文件可能会丢失数据 输入文件缓冲☒ 磁盘文件 程序数据区 a 输出文件缓冲区 fclose
文件关闭fclose ❖作用:使文件指针变量与文件“脱钩”,释放文件结构 体和文件指针 ❖函数原型:int fclose(FILE *fp) ❖功能:关闭fp指向的文件 ❖返值:正常关闭为文件打开时返回的文件类型指针 0;出错时,非0 磁盘文件 输出文件缓冲区 输入文件缓冲区 程序数据区 a 缓冲文件系统: fclose 不关闭文件可能会丢失数据

if(fp==NULL) {printf("文件打开失败!n"); exit(O); xt函数用于立即退出当前程序的执行,并以0作为返回值返回到操作系统。 【例】在D盘的f01文件夹中创建一个名为a1.txt的文件。 main() (FILE *fp; fp=fopen("d:\\f0l\\al.txt","w"); if(fp==NULL) {printf"文件打开失败!n"): exit(0); fclose(fp);
if(fp==NULL) {printf("文件打开失败!\n"); exit(0); } exit函数用于立即退出当前程序的执行,并以0作为返回值返回到操作系统。 【例】在D盘的f01文件夹中创建一个名为a1.txt的文件。 main() {FILE *fp; fp=fopen("d:\\f01\\a1.txt","w"); if(fp==NULL) {printf("文件打开失败!\n"); exit(0); } fclose(fp); }

创建文本文件与二进制文件 一个新创建的文件是文本文件还是二进制文件的 决定因素,是向文件中写入数据的函数,而不 是文件的打开方式。 使用fprintf、fpute和fputs等函数所创建的文件是文本文; fscanf、.fgetci和fgets等函数用于读取文本文件; 而使用fwrite函数所创建的文件,则是二进制文件。 而fread函数则用于读取二进制文件
创建文本文件与二进制文件 一个新创建的文件是文本文件还是二进制文件的 决定因素,是向文件中写入数据的函数,而不 是文件的打开方式。 使用fprintf、fputc和fputs等函数所创建的文件是文本文; fscanf、fgetc和fgets等函数用于读取文本文件; 而使用fwrite函数所创建的文件,则是二进制文件。 而fread函数则用于读取二进制文件