第13章第1节 第十三章文件 §13.1文件概述 文件 存储在外部存储介质上的数据的集合。文件必须有文件名,文件是操 作系统管理数据的基本单位 文件中的 读:由文件名找到文件→取文件中数据放入内存 两种操作 写:建立文件→将内存中的数据存入文件。 二ASCⅡ文件与二进制文件 1ASCⅡ文件—文本文件(type可显示),以ASCⅡ码值来存放数据 如:1000 都当成字符0,0的ASCⅡ值48 00110000 当成一个字符1,ASCⅡ值49—00110001 00110010011000101001000 特点:1)便于处理字符;2)占用空间大;3)表示数据时要进行转换
第13章第1节 §13.1 文件概述 一. 文件 ——存储在外部存储介质上的数据的集合。文件必须有文件名,文件是操 作系统管理数据的基本单位。 文件中的 两种操作 读: 由文件名找到文件→取文件中数据放入内存 写: 建立文件→将内存中的数据存入文件。 二. ASCⅡ文件与二进制文件 1.ASCⅡ文件——文本文件(type 可显示), 以ASCⅡ码值来存放数据 如:1000 都当成字符0, 0的ASCⅡ值48 00110000 当成一个字符1,ASCⅡ值49 00110001 00110001 00110000 00110000 00110000 1 0 0 0 特点:1)便于处理字符;2)占用空间大;3) 表示数据时要进行转换
第13章第1节 2二进制文件 以二进制数据(即内存中表示的方式的形式,存入外存 如:100进制9100在入方式0000100 特点:占用空间小。 三缓冲文件系统和非缓冲文件系统 缓冲文件系统:系统自动开辟缓冲区(butr,属于“高级磁盘输入输出 系统”(处理文本文件)。 数据区输出文件缓冲区 外存 输入文件缓冲区“读 非缓冲文件系统:由程序为文件设定缓冲区,属于“低级磁盘输入输出系 统”(处理二进制文件)。 ANSI O中,采用缓冲文件系统处理文本文件和二进制文件
第13章第1节 以二进制数据(即内存中表示的方式)的形式,存入外存 2.二进制文件 如: 1000 1111101000 二进制 00000011 11101000 存入方式 特点:占用空间小。 三. 缓冲文件系统和非缓冲文件系统 缓冲文件系统:系统自动开辟缓冲区(buffer),属于“高级磁盘输入输出 系统”(处理文本文件)。 数据区 输出文件缓冲区 输入文件缓冲区 外存 写 读 非缓冲文件系统: 由程序为文件设定缓冲区,属于“低级磁盘输入输出系 统” (处理二进制文件)。 ANSI C中, 采用缓冲文件系统处理文本文件和二进制文件
第13章第1节 四.C中文件操用的基本步骤—三步 1.打开文件 采用f0pen函数和文件指针 2.读、写数据 fgetcO; fputs0; fscanf0; fprintf0; fread; fwriteO 读、写字 格式读、写,用 用于任一类型 符 于任一类型 般适用于二进制 般适用于文本 文件 文件 3.关闭文件 采用 fclose0函数
第13章第1节 四. C中文件操用的基本步骤——三步 1. 打开文件 采用fopen函数和文件指针 2. 读、写数据 fgetc() ; fputs(); fscanf() ; fprintf(); fread() ; fwrite() 3. 关闭文件 采用fclose()函数。 读、写字 符 格式读、写,用 于任一类型 一般适用于文本 文件 用于任一类型 一般适用于二进制 文件
第13章第2节 §132文件类型指针 用于指向文件 定义: FILE“p 定义一个指向文 指针变量名件的指针变量p 表示类型符号 实质上:FE是在“ stdio. h”中用 typedef定义的一个结构体类型,该 结构体成员存放文件的相应内容,如文件号,缓冲区大小等等。每使用 个文件,系统自动将文件的信息存放在一个FILE类型的结构体变量中。 FIE—相当于“文件类型” FILE*p实质上是定义一个指向存放文件信息的结构体变量的指针。 注:如要使用文件指针,应在程序开头加# include“ 'stdio. h
§13.2 文件类型指针 第13章第2节 ——用于指向文件 定义: FILE *p 指针变量名 表示类型符号 实质上:FILE 是在“stdio.h” 中用typedef 定义的一个结构体类型,该 结构体成员存放文件的相应内容,如文件号,缓冲区大小等等。每使用 一个文件,系统自动将文件的信息存放在一个FILE类型的结构体变量中。 FILE —— 相当于“文件类型” FILE *p 实质上是定义一个指向存放文件信息的结构体变量的指针。 定义一个指向文 件的指针变量p 注: 如要使用文件指针, 应在程序开头加 # include“stdio.h
第13章第3节 §13.3文件的打开与关闭 原则:使用文件,心须先打开,用完后必须关闭文件 文件的打开fopn0函数 r只读 w只写 用于文本文件 EILE fp; a追加 rb只读 fp- fopen(文件名,使用方式) wb只写 用于二进制文件 ab追加 w+用于文本文件 rb+ 读/写 wb+ 用于二进制文件 abt 说明:如打开不能实现(如磁盘坏), fopen返回空指针值NULL(NULL 在“ stdio.h”中定义为:# define null0 实用 if( fp=fopen(” filel”,”r”)=NULL) 形式 { printi(“ can not open this fileln”); exit(0);) 关闭所有文件,终止程序运行
§13.3 文件的打开与关闭 第13章第3节 一. 文件的打开 fopen() 函数 原则:使用文件,心须先打开,用完后必须关闭文件 EILE *fp; fp=fopen(文件名,使用方式) r 只读 w 只写 a 追加 rb 只读 wb 只写 ab 追加 r+ w+ a+ rb+ wb+ ab+ 用于文本文件 用于二进制文件 用于文本文件 用于二进制文件 读/写 说明:如打开不能实现(如磁盘坏),fopen()返回空指针值 NULL(NULL 在“stdio.h”中定义为:#define NULL 0 if ((fp=fopen(”file1”,”r”))==NULL) { printf(“can not open this file\n”); exit(0);} 实用 形式 关闭所有文件,终止程序运行
第13章第3节 二.文件的关闭fose0函数 fclose(fp) ℃→文件指针 0执行关闭 nose0返回值—1非0关闭时错
二. 文件的关闭 fclose() 函数 fclose(fp) 文件指针 flose()的返回值 0 执行关闭 非0 关闭时错 第13章第 3 节
第13章第4节 §134文件的读写 一, fputc0和fet0函数 1. fputc函数 fputc( ch, fp) 将字符写入fp所指向的磁盘文件 字符变常量文件指针 返回值∫成功:返回该字符 失败:返回EOF(“ 'stdio. h”中,EOF定义为1) 注:文件必须以写或读写)方式打开 2.ge函数ch=utc(t)从的所指的文件中读一个字符或 个字节),赋给ch 字符变量文件指针 返回值成功:返回该字符 结束:返回EOF(“ stdio. h”中,EOF定义为-1) 文件结束标志 注:文件必须以读或读写)方式打开
fputc( ch, fp) ch=fputc(fp) §13.4 文件的读写 第13章第4节 一. fputc()和fgetc()函数 1. fputc函数 字符变/常量 文件指针 将字符写入fp所指向的磁盘文件 返回值 成功: 返回该字符 失败: 返回EOF(“stdio.h”中,EOF定义为-1) 2. fgetc函数 从fp所指的文件中, 读一个字符(或一 个字节), 赋给ch. 字符变量 文件指针 注: 文件必须以写(或读写)方式打开 成功: 返回该字符 结束: 返回EOF(“stdio.h”中,EOF定义为-1) 返回值 文件结束标志 注: 文件必须以读(或读写)方式打开
第13章第4节 3.读文件时,文件结束的判断 1)利用gec0函数的返回值 =EOF(即-1),结束 ≠-1末结束 问题:a.对于文本文件,ASCⅡ判,∴如get返回值=EOF,表示文件结束。 b).对于二进制文件,读取的字节数据可能为1,而文件并未结束。出现 不正确的判断。 2)利用判断文件结束函数feof0(在“ stdio. h”中) feof(fp) 如文件结束:值=1 如文件未结束:值=0 文件指针 4.文件读写举例 例131从键盘输入一些字符,逐个把他们存入磁盘中去,直到输入回车为止 解:要将字符存入磁盘,必须用到将字符写入磁盘的函数 [fputco; 1)确定存入磁盘的文件名; 2)用文件指针,采用f0pem0函数,以“写”的方式打开文件 3)输入字符,判其是否为‘m,如不是,则用 puts写入文件,如是‘m,写 文件结束。由于不止输入一个字符,故需要采用循环。 4)关闭文件
第13章第4节 3. 读文件时, 文件结束的判断 1). 利用fgetc()函数的返回值 =EOF(即-1), 结束 ≠-1 末结束 问题: a). 对于文本文件, ∵ASCⅡ≠0, ∴如fgetc()返回值=EOF,表示文件结束。 b). 对于二进制文件,读取的字节数据可能为-1,而文件并未结束。出现 不正确的判断。 2). 利用判断文件结束函数feof() (在“stdio.h”中) feof(fp) 文件指针 如文件结束:值=1 如文件未结束:值=0 4. 文件读写举例 例13.1 从键盘输入一些字符, 逐个把他们存入磁盘中去, 直到输入回 车为止. 解: 要将字符存入磁盘, 必须用到将字符写入磁盘的函数fputc(); 1) 确定存入磁盘的文件名; 2) 用文件指针, 采用fopen()函数, 以“写”的方式打开文件 3) 输入字符, 判其是否为‘\n’, 如不是,则用fputs()写入文件, 如是‘\n’, 写 文件结束。由于不止输入一个字符,故需要采用循环。 4) 关闭文件
第13章第4节 include'stdio h" main( FILE fp char c, filename [15; printf( input objective filename: B gets(filename); 输入文件名 if(fp=fopen(filename, " W)==NULL fprintf("In can not open the fileln"); l 以“写”的方式打开文件 exit(0): printf input charaters\n") for(;(c=getchar)='n; 循环输入若干字符,判其是否为‘n dputchar(c); fputc(c, fp); 如不为“n则写入文件,并在屏幕上显示 以便检査。如为“m则结束输入。 fclose(fp) while((c=getchar)]=n) kputchar(c); fputc(c, fp);
# include"stdio.h" main() {FILE *fp; char c, filename[15]; printf( "input objective filename: "); gets(filename); if((fp=fopen(filename,"w"))==NULL) {printf("\n can not open the file\n"); exit(0); } printf("input charaters\n"); for( ; (c=getchar())!='\n'; ) {putchar(c); fputc(c,fp); } fclose(fp); } 输入文件名 以“写”的方式打开文件 循环输入若干字符,判其是否为‘\n’ 如不为‘\n’则写入文件,并在屏幕上显示 以便检查。如为‘\n’则结束输入。 while((c=getchar())!= '\n’) {putchar(c); fputc(c,fp); } 第13章第4节
例132将一个文件中的内容,复制到另一个文件中去。 第13章第4节 解:采用循环,从源文件中逐一读取一个字节内容,写入目标文件中,直到源文件结 束为止。 include stdio. h' maino FILE * fin, *fout char c char sourcefile 15, objectivefile 15: printf(n input sourcefile: i gets(sourcefile); if((fin=fopen(sourcefile, r"==NULL 打开源文件 Printf("in can not open source fileIn) exit(O);) printf("in input objectivefile: ) gets(objectivefile); if(fout=fopen(objectiveHle,W==NULL) 打开目标文件 printf("n can not open objectivefileIn) exit(0); while( feof(fin)==0) 判源文件是否结束 fe=fgetc(fin) 从源文件中逐个读内容,写入目标文件中 fputc(c, fout); fclose (fin); fclose(fout);
例13.2 将一个文件中的内容,复制到另一个文件中去。 解:采用循环,从源文件中逐一读取一个字节内容,写入目标文件中,直到源文件结 束为止。 # include"stdio.h" main() {FILE *fin, *fout; char c; char sourcefile[15], objectivefile[15]; printf("\n input sourcefile: "); gets(sourcefile); if((fin=fopen(sourcefile,"r"))==NULL) {printf("\n can not open source file\n"); exit(0);} printf("\n input objectivefile: "); gets(objectivefile); if((fout=fopen(objectivefile,"w"))==NULL) {printf("\n can not open objectivefile\n"); exit(0);} while( feof(fin)==0) {c=fgetc(fin); fputc(c,fout);} fclose(fin); fclose(fout); } 判源文件是否结束 从源文件中逐个读内容,写入目标文件中 打开源文件 打开目标文件 第13章第4节