本次课内容:文件概念、文件打开与关了、文件的顺序读写 教学目的:掌握相关)件椤念, 关闭函数、指针操作定 义、顺序文件读写函卷。 重点:相关文件概、件操i、八序文件操作。 难点:文件信息区、中区、文亻指针术念、定义及各函数应用 预习: 字符和字符串操伫数 标准输入输出设
本次课内容:文件概念、文件打开与关闭、文件的顺序读写 教学目的:掌握相关文件概念,文件打开、关闭函数、指针操作定 义、顺序文件读写函数及应用。 重点:相关文件概念、文件操作函数、顺序文件操作。 难点:文件信息区、缓冲区、文件指针概念、定义及各函数应用。 预习: 字符和字符串操作函数 标准输入输出设备
文件概述 1、文件的概述 文件:记录在外部介质中的数据集合。 文件分类: 按介质:磁盘文件、磁带文件、光盘文件等。 按内容:源程序、目标文件、数据文件等。 按组织形式:字符代码文件、二进制文件等。 字符代码文件:每个字符占一个字节 二进制文件:按内容中的存储形式存放。如整型点两字节。 2、标准(I/O)和系统(I/0) C语言磁盘文件系统分两大类: 1)缓冲文件系统(又称高层文件系统或标准文件系统)。 自动为文件设缓冲区 2)非缓冲文件系统(又称低层文件系统) 用户自己设置缓冲区。 缓冲区:提高数据读写速度在内容中设置的一块区域。 文件与缓冲区间关系见下页
一、文件概述 1、文件的概述 文件:记录在外部介质中的数据集合。 文件分类: 按介质:磁盘文件、磁带文件、光盘文件等。 按内容:源程序、目标文件、数据文件等。 按组织形式:字符代码文件、二进制文件等。 字符代码文件:每个字符占一个字节。 二进制文件:按内容中的存储形式存放。如整型点两字节。 2、标准(I/O)和系统(I/O) C语言磁盘文件系统分两大类: 1) 缓冲文件系统(又称高层文件系统或标准文件系统)。 自动为文件设缓冲区。 2) 非缓冲文件系统(又称低层文件系统) 。 用户自己设置缓冲区。 缓冲区:提高数据读写速度在内容中设置的一块区域。 文件与缓冲区间关系见下页
缓冲文件系统特点:对程序中的每一个文件都在内存中开辟一个 “缓冲区”。 内存 磁盘文件 a输入(出坟文 件缓冲区 程序数据区 读写文件数据的函数见表91 fgetc、 fputc、 fgets、 fputs、 fscanf、 fprintf 3、文件(FIE类型指针 FILE:是文件类型名,是一个由系统定义的结构体类型,各成员 为文件操作所需信息。 文件信息(区):读写位置、内存缓冲区地址、缓冲区未处理字符 数、文件操作方式等。 “文件信息区”在内存中是一个结构体变量。 对FLE的定义是在 stdio. h头文件中由系统事先指定的。 只要程序用到一个文件,系统就为此文件开辟一个如上的结构体变 量
缓冲文件系统特点:对程序中的每一个文件都在内存中开辟一个 “缓冲区”。 读写文件数据的函数见表9.1。 fgetc、fputc、fgets、fputs、fscanf、fprintf。 3、文件(FILE)类型指针 FILE:是文件类型名,是一个由系统定义的结构体类型,各成员 为文件操作所需信息。 文件信息(区):读写位置、内存缓冲区地址、缓冲区未处理字符 数、文件操作方式等。 “文件信息区”在内存中是一个结构体变量。 对FILE的定义是在stdio.h头文件中由系统事先指定的。 只要程序用到一个文件,系统就为此文件开辟一个如上的结构体变 量。 a 程序数据区 输入(出)文 件缓冲区 磁盘文件 内存
定义指针变量 sp FILE *fptl, *fpt2, *fpt3 t,皮件的信息ip2,文件2的信息ft3.反件3的信息 区(结构体 区(结构体 区(结构体 变量) 变量) 变量) FILE是文件类型指针,所定义的指针变量都是指向文件的。即指 向文件的信息区(文件信息区在内存中是一个结构体变量)。 定义格式:FDE*文件结构体指针变量名表; 文件的打开与关闭 文件的打开 打开:在程序和操作系统之间建立联系 格式: fopen(“文件名”,“文件使用方式”); 如: fopen(“flel”;r”); 文件使用方式:r:只读、w:只写、a:追加 b:二进制文件+:读写 r、w、a可以与b、+结合,如rb+
定义指针变量: 如:FILE *fpt1,*fpt2,*fpt3; FILE是文件类型指针,所定义的指针变量都是指向文件的。即指 向文件的信息区(文件信息区在内存中是一个结构体变量)。 定义格式: FILE * 文件结构体指针变量名表; 二、文件的打开与关闭 1、文件的打开 打开:在程序和操作系统之间建立联系。 格式:fopen (“文件名”,“文件使用方式”); 如: fopen ( “file1”,”r”); 文件使用方式:r :只读、w:只写、 a:追加 b :二进制文件 + :读写 r、w、a 可以与 b 、+ 结合,如 rb+。 文件1的信息 区(结构体 变量) 文件3的信息 区(结构体 变量) 文件2的信息 区(结构体 变量) fpt1 fpt2 fpt3
fopen函数返回值是一个地址(被打开文件的信息区) NULL:返回值为0,即读时文件不存在,或写时磁盘满 打开文件时,程序通知编译系统三个方面的信息: 1)要打开哪一个文件;2)对文件的使用方式;3)函数的返回值赋给 哪一个指针变量。 文件名 c程序文件使用操作 方式系统 磁盘 指向文件 的指针 文件打开方法: if(fp= fopen(“flel,"r”)==NULL { printf(“ cannot open this file n”); eX exit(01:正常退出;exit(1):出错退出(括号内非零)
fopen函数返回值是一个地址(被打开文件的信息区)。 NULL:返回值为0,即读时文件不存在,或写时磁盘满。 打开文件时,程序通知编译系统三个方面的信息: 1)要打开哪一个文件;2)对文件的使用方式;3)函数的返回值赋给 哪一个指针变量。 文件打开方法: if ((fp=fopen(“file1”,”r”))==NULL) { printf(“cannot open this file \n”); exit(0); } exit(0):正常退出;exit(-1):出错退出(括号内非零)。 C程序 操作 系统 磁盘 文件名 文件使用 方式 指向文件 的指针
对磁盘文件,在使用前先要打开,而对终端设备,也是作为文件来 处理。 系统默认的标准设备指针变量: 标准输入 stdin 标准输出 stoit 标准出错输出 stderr 以上三个文件都是以终端设备为输入输出对象的。 如:指定输出一个数据到 Sidou所指向的文件,就是指输出到终端 设备。 为使用方便,C程序中不必指定这三个文件,可以直接输入输出 处理,但指的都是标准的终端设备 2、文件的关闭 格式: fclose(文件指针变量); 功能:释放文件信息区(结构体变量)。 注:若此时缓冲区中有数据,则先输出到文件,再关闭
对磁盘文件,在使用前先要打开,而对终端设备,也是作为文件来 处理。 系统默认的标准设备指针变量: 标准输入 stdin 标准输出 stdoit 标准出错输出 stderr 以上三个文件都是以终端设备为输入输出对象的。 如:指定输出一个数据到stdout所指向的文件,就是指输出到终端 设备。 为使用方便,C程序中不必指定这三个文件,可以直接输入输出 处理,但指的都是标准的终端设备。 2、文件的关闭 格式:fclose(文件指针变量); 功能:释放文件信息区(结构体变量)。 注:若此时缓冲区中有数据,则先输出到文件,再关闭
、文件的顺序读写 输入和输出一个字符 (1)输出一个字符到磁盘文件 形式: fputc(ch,fp) ch:字符变量 fp:指向的FIE的结构体的文件,fp的值是用 fopen函数打开文件 时得到的。 函数返回值:当函数成功时返回输出的字符,否则返回EOF 如:# include“ 'stdio. h” main( EOF的值在sdoh中定义为-1。 fFILEf char ch; if(fp- fopen(“ filel. txt”,”w)==NULL) { printf("cannptipen this file.Ⅶn”); exit(O);) while((ch= getchar()!=Ⅶn”) iput( ch, fp ) fclose( fp)
三、文件的顺序读写 1、输入和输出一个字符 (1)输出一个字符到磁盘文件 形式: fputc( ch , fp ) ch : 字符变量 fp : 指向的FILE的结构体的文件,fp 的值是用fopen 函数打开文件 时得到的。 函数返回值:当函数成功时返回输出的字符,否则返回EOF。 如: #include “stdio.h” main ( ) { FILE * fp; char ch; if ((fp=fopen(“file1.txt”,”w”))==NULL) { printf(“cannpt ipen this file.\n”); exit(0); } while (( ch=getchar( )!=‘\n’) fputc( ch , fp ); fclose( fp); } EOF的值在stdio.h中定义为-1
(2)从磁盘文件中接收一个字符 形式: ch=fgetc(fp) 功能:从指针变量fp所指向的文件中读入一个字符并赋给字符变量 ch,fget函数值就是该字符。 说明: fgetc函数遇到文件结束符,则函数返回文件结束EOF 如:# include“ 'stdio. h” main( FILE *fp; char ch: if(fp= fopen(“ filel. txt”,”r)==NULL) i printf("cannot ipen this file.n); exit(O); while(( ch=fgetc(fp) =EOF putchar( ch fclose( fp)
(2)从磁盘文件中接收一个字符 形式: ch = fgetc (fp); 功能:从指针变量fp所指向的文件中读入一个字符并赋给字符变量 ch ,fgetc函数值就是该字符。 说明:fgetc函数遇到文件结束符,则函数返回文件结束EOF。 如:#include “stdio.h” main( ) { FILE * fp; char ch; if ((fp=fopen(“file1.txt”,”r”))==NULL) { printf(“cannpt ipen this file.\n”); exit(0); } while (( ch=fgetc (fp )!=EOF) putchar( ch ); fclose( fp); }
2、输入和输出一个字符串 (1) fgets函数 形式: fgets(st;n,fp 功能:从fp所指向的文件读取n-1个字符,并放到字符数组sr中。 说明:1)在读入n-1个字符完成前遇到“n”或EOF(文件结束符),即 结束读入 2)“in”也作为字符送入数组。读入的字符串之后自动加入 “0”,故读入的字符数为n-1 3)函数返回值为str数组首地址。如读到文件尾或出借则返回 NULL。 例:从磁盘文件中读回字符串,并在屏幕上显示出来。 include“ stdio.h” main f FILE *fp; char string 81; f((fp- fopen(“fle2,txt”,”r”)==NULL) i printf(cant open file); exit(O); while(fgets(string, 81, fp)=NULL) printf("%osIn", string); fclose(fp
2、输入和输出一个字符串 (1)fgets函数 形式:fgets(str,n,fp) 功能:从fp所指向的文件读取n-1个字符,并放到字符数组str中。 说明:1)在读入n-1个字符完成前遇到“\n”或EOF(文件结束符),即 结束读入。 2)“\n”也作为字符送入数组。读入的字符串之后自动加入 “\0”,故读入的字符数为n-1。 3)函数返回值为str 数组首地址。如读到文件尾或出借则返回 NULL。 例:从磁盘文件中读回字符串,并在屏幕上显示出来。 #include “stdio.h” main( ) { FILE *fp; char string[81]; if ((fp=fopen(“file2,txt”,”r”))==NULL) { printf(“can’t open file”); exit(0);} while (fgets(string,81,fp)!=NULL) printf(“%s\n”,string); fclose(fp); }
(2) fputs函数 形式: fputs(str;fp) 功能:把字符数组str中的字符串输出到fp所指向的文件。 说明:字符串结束“0”不输出。 例:# include“ 'stdio. h” main f FILE *fp; char string 81; if(fp- fopen(“fle2,txt”,”w”)==NULL printf(“ (“can? open file”) exit(0); 1 while(strlen(gets(string))>0) i fputs(string, fp) puts(n”,fp); fclose(fp)
(2)fputs函数 形式:fputs(str,fp) 功能:把字符数组str中的字符串输出到fp所指向的文件。 说明:字符串结束“\0”不输出。 例:#include “stdio.h” main( ) { FILE *fp; char string[81]; if ((fp=fopen(“file2,txt”,”w”))==NULL) { printf(“can’t open file”); exit(0);} while (strlen(gets(string))>0) { fputs(string,fp); fputs(\n”,fp); } fclose(fp); }