1、第10章 文件,文件的概念 文件类型结构体FILE 文件的打开与关闭 文件读写操作函数,电子教案 for 12专升本,文件的概念,文件是指存放在外部存储介质上的数据集合。为标识一个文件,每个文件都必须有一个文件名,其一般结构为:主文件名.扩展名 文件命名规则,遵循操作系统的约定。 文件的处理方式:P333 图10.2 数据写入文件或从文件中读出数据的过程:,文件类型结构体 FILE P333,系统给每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(如文件名、文件位置等)。这些信息保存在一个结构类型变量中,该结构类型由系统定义、取名为FILE。 注意:结构类型名“FILE”必须大写,
2、是一个指针类型。 声明FILE结构体类型的信息,在头文件stdio.h中包含。,文件的打开与关闭 P335,文件的打开fopen()函数 1. 用法: FILE *fopen(“文件名“,“操作方式“); 2. 功能:返回一个指向指定文件的指针。 3函数原型:stdio.h 。 (1)“文件名”是指要打开(或创建)的文件名。如果使用字符数组(或字符指针),则不使用双引号。 (2)“操作方式”如 P335表10.1所示。,说明P336,(1)如果不能实现打开指定文件的操作,则fopen()函数返回一个空指针NULL。 为增强程序的可靠性,常用下面的方法打开一个文件:if(fp=fopen(“文件
3、名“,“操作方式“)=NULL) printf(“can not open this filen“); exit(0); ,说明(2),(2)“r(b)+” 与 “a(b)+”的区别:使用前者打开文件时,读写位置指针指向文件头;使用后者时,读写指针指向文件尾。 (3)使用文本文件向计算机系统输入数据时,系统自动将回车换行符转换成一个换行符;在输出时,将换行符转换成回车和换行两个字符。使用二进制文件时,内存中的数据形式与数据文件中的形式完全一样,就不再进行转换。 (4)在程序开始运行时,系统自动打开三个标准文件,并分别定义了文件指针:1)标准输入文件stdin:指向终端输入(一般为键盘)。如果程
4、序中指定要从stdin所指的文件输入数据,就是从终端键盘上输入数据。 2)标准输出文件stdout:指向终端输出(显示器)。 标准错误文件stderr:指向终端标准错误输出(一般为显示器)。,文件关闭fcolse()函数P 337,1. 用法: int fclose(FILE *文件指针); 2功能:关闭“文件指针”所指向的文件。如果正常关闭了文件,则函数返回值为;否则,返回值为非。,文件操作P338,文件的读写是整个文件操作的核心,也是最灵活多变的部分。针对文本文件和二进制文件的不同性质进行分类操作,对文本文件可按字符读写或按字符串读写;对二进制文件可按成块读写或格式化读写。,从文件中读入一
5、个字符P338,从文件中读入一个字符fgetc()函数P338 1)用法:int fgetc(文件指针); 2)功能:从“文件指针”所指向的文件中,读入一个字符,同时将读写位置指针向前移动1个字节(即指向下一个字符)。 失败时,返回文件结束标志EOF(即-1),成功时返回所读的字符。,将一个字符写到文件中,1)用法:int fputc(字符数据,文件指针); 其中“字符数据”,既可以是字符常量,也可以是字符变量。 2)功能:将字符数据输出到“文件指针”所指向的文件中去,同时将读写位置指针向前移动1个字节(即指向下一个写入位置)。 如果输出成功,则函数返回值就是输出的字符数据;否则,返回一个符号
6、常量EOF(其值在头文件stdio.h中,被定义为-1)。,关于符号常量EOF与feof(),在对ASCII码文件执行读入操作时,如果遇到文件尾,则读操作函数返回一个文件结束标志EOF(其值在头文件stdio.h中被定义为-1)。 在对二进制文件执行读入操作时,必须使用库函数feof()来判断是否遇到文件尾。 库函数feof(): 1)用法:int feof(文件指针); 2)功能:在执行读文件操作时,如果遇到文件尾,则函数返回逻辑真(1);否则,则返回逻辑假(0)。 feof()函数同时适用于ASCII码文件和二进制文件。 P339 例10.2,读写一个字符串 P341,库函数fgets()
7、从文件中读一个字符串: 用法:char *fgets(指针,串长度+1,文件指针); 功能:从指定文件中读入一个字符串,存入“字符数组指针”中,并在尾端自动加一个结束标志0;同时,将读写位置指针向前移动strlength(字符串长度)个字节。如果在读入规定长度之前遇到文件尾EOF或换行符,读入即结束。,写字符串到文件,库函数fputs()向指定文件输出一个字符串 1)用法:int fputs(字符串,文件指针); 其中“字符串”可以是一个字符串常量,或字符数组名,或字符指针变量名。 2)功能:向指定文件输出一个字符串,同时将读写位置指针向前移动strlength(字符串长度)个字节。如果输出成
8、功,则函数返回值为;否则,为非值。 P342 例10.3,对文件进行格式化读写 P344,int fscanf(文件指针,“格式符“,输入变量首地址表);int fprintf(文件指针,“格式符“,输出参量表);,读写一个数据块 P345,1用法: int fread(void *buffer,int size,int count,FILE *fp); int fwrite(void *buffer,int size,int count,FILE *fp); 2功能: fread()从fp所指向文件的当前位置开始,一次读入size个字节,重复count次,并将读入的数据存放到从buffer开始的内存中;同时,将读写位置指针向前移动size* count个字节。其中,buffer是存放读入数据的起始地址。,读写一个数据块 (2),fwrite()从buffer开始,一次输出size个字节,重复count次, 并将输出的数据存放到fp所指向的文件中;同时,将读写位置指针向前移动size* count个字节。 其中,buffer是要输出数据在内存中的起始地址。 如果调用fread()或fwrite()成功,则函数返回值等于count。 fread()和fwrite()函数,一般用于二进制文件的处理。P346 例10.4,