资源预览内容
第1页 / 共48页
第2页 / 共48页
第3页 / 共48页
第4页 / 共48页
第5页 / 共48页
第6页 / 共48页
第7页 / 共48页
第8页 / 共48页
第9页 / 共48页
第10页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第八章 文件,C/C+语言程序设计,1,龚尚福,贾澎涛主编 C/C+语言程序设计 西安电子科技大学出版社,2,第8章 文件,8.1 文件概述 8.2 文件指针 8.3 文件的打开与关闭 8.4 文件的读写 8.5 文件的定位 8.6 文件检测函数 8.7 小结,3,文件:是指一组相关数据的有序集合。通常是驻留在外部介质(如磁盘等)上的,在使用时才调入内存中来。 文件是操作系统管理数据的最小单位,其总原则是“按名存取”。 例如:程序文件中保存着程序,数据文件中保存着数据。 *.C C语言的源程序 文本文件 *.OBJ 目标文件 二进制文件 *.EXE 可执行文件 二进制文件,8.1 文件概述,1. 什么是文件,4,按文件编码方式分为: ASCII文件(或称文本文件) ASCII码文件中每个字节存放一个ASCII代码,代表一个字符,此种存储形式便于输出显示,在DOS操作系统下可以直接阅读。 二进制文件 二进制文件中的数据是按照在内存中的二进制存储格式存放的,此种存储形式节省存储单元。二进制文件在DOS操作系统下不能直接阅读。,8.1 文件概述,2. 文件的种类,5,例如:将短整数1949分别存储在这两种数据文件中。,ASCII文件:ASCII码,二进制文件:补码,占用4个字节,占用2个字节,8.1 文件概述,2. 文件的种类,6,C语言把文件看作是一个字符(字节)的序列,对文件的存取是以字符(字节)为单位的,输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。,8.1 文件概述,7,8.2 文件指针,文件类型指针 在文件读写过程中,系统需要确定文件信息、当前的读写位置、缓冲区状态等信息,才能顺利实现文件操作。 在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。定义文件指针的一般形式为:,FILE *指针变量标识符;,8,8.2 文件指针,FILE应为大写;它实际上是由系统定义在头文件stdio.h中的一个结构体类型。 当需要对一个文件进行操作时,只要先定义一个指向FILE类型的指针,用该指针变量指向一个文件,通过文件指针就可以对它所指的文件进行各种操作。例如: FILE *fp;,9,8.3 文件的打开与关闭,操作文件的一般步骤 打开文件 读写文件 关闭文件,打开文件:建立用户程序与文件的联系,为文件分 配一个文件缓冲区。,读写文件:是指对文件的读、写、追加和定位操作。,关闭文件:切断文件与程序的联系,释放文件缓冲 区。,C语言的输入输出函数库中提供了大量的函数,用于完成对数据文件的建立、数据的读写、数据的追加等操作。 在程序中调用这些函数时,必须先用include命令包含stdio.h文件。,10,常用的调用形式: 文件名:需要打开的文件名称(字符串)。 文件使用方式:文件的类型和操作要求,规定了打开文件的目的,共12种。,8. 3 文件的打开与关闭,1. 文件打开函数fopen( ),函数功能: 按指定的文件使用方式打开指定的文件。 若文件打开成功,为该文件分配一个文件缓冲区和一个FILE类型变量,返回一个FILE类型指针; 若文件打开失败,返回NULL。,FILE *fp; fp = fopen(文件名, 文件使用方式);,11,文本文件的三种基本使用方式 ”r”:只读方式 为读(输入)文本文件打开文件。若文件不存在,返回NULL。 ”w”:只写方式 为写(输出)文本文件打开文件。若文件不存在,则建立一个新文件;若文件已存在,则清空文件。 ”a”:追加方式 为写(输出)文本文件打开文件。若文件已存在,则保持原来文件的内容,将新的数据增加到原来数据的后面;若文件不存在,则返回NULL。,8. 3 文件的打开与关闭,12,二进制文件的三种基本使用方式 ”rb”:只读方式 为读(输入)二进制文件打开文件。若文件不存在,返回NULL。 ”wb”:只写方式 为写(输出)二进制文件打开文件。若文件不存在,则建立一个新文件;若文件已存在,则清空文件。 ”ab”:追加方式 为写(输出)二进制文件打开文件。若文件已存在,则保持原来文件的内容,将新的数据增加到原来数据的后面;若文件不存在,则返回NULL。,8. 3 文件的打开与关闭,13,8. 3 文件的打开与关闭,文件的其他打开方式 ”r+”:可以对文本文件进行读/写操作。 若文件不存在返回NULL; 若文件存在内容不被清空。 ”w+”:可以对文本文件进行读/写操作。 若文件已经存在,则先清空文件原来的内容。 ”a+”:可以对文本文件进行读/追加操作。 文件内容不会清空。 ”rb+”:可以对二进制文件进行读/写操作。 ”wb+”:可以对二进制文件进行读/写操作。 ”ab+”:可以对二进制文件进行读/追加操作。,14,在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。因此常用以下程序段打开文件: if(fp=fopen(“c:ex1“,“rb“)=NULL) printf(“nerror on open c:ex1 file!“); getch(); exit(1); ,8. 3 文件的打开与关闭,15,常用的调用形式: fp:已经打开的文件指针。,8. 3 文件的打开与关闭,2. 文件关闭函数fclose( ),函数功能: 关闭fp指定的文件,释放该文件的缓冲区、 FILE类型变量及文件指针。 若文件关闭成功,则返回0; 若文件关闭失败,则返回非0值。,fclose( fp );,16,常用的调用形式:,8.4 文件的读写,8.4.1 文件的字符输入输出函数,2. 字符输出函数fputc( )(或putc( )),函数功能: 将一个字符(ASCII码)写入到文件指针所指向的文件(该文件必须是以写或读写方式打开的)中。 若输出操作成功,函数返回写入的字符;否则,返回EOF。,系统定义的文本文件结束标志,其值为 (-1)。,fputc(字符量,文件指针);,17,8.4 文件的读写,8.4.1 文件的字符输入输出函数,2. 字符输出函数fputc( )(或putc( )), putc函数与fputc函数的功能相同。在stdio.h文件中被定义为 #define putc(c,f) fputc(c),f) 标准文件中用的putchar函数是fputc函数的特殊用法,它在stdio.h文件中被定义为 #define putchar(c) putc(c),stdout),18,说明: (1)被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符从文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。 (2)每写入一个字符,文件内部位置指针向后移动一个字节。 (3)当fp为stdout时,“fputc(a,fp);”等价于函数putchar(a)。其中,stdout是标准输出设备的文件指针。,8.4 文件的读写,8.4.1 文件的字符输入输出函数,19,说明: (1)被写入的文件可以用写、读写、追加方式打开,用写或读写方式打开一个已存在的文件时将清除原有的文件内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符从文件末开始存放,必须以追加方式打开文件。被写入的文件若不存在,则创建该文件。 (2)每写入一个字符,文件内部位置指针向后移动一个字节。 (3)当fp为stdout时,“fputc(a,fp);”等价于函数putchar(a)。其中,stdout是标准输出设备的文件指针。,8.4 文件的读写,8.4.1 文件的字符输入输出函数,20,常用的调用形式: str:字符指针,可以是字符数组名或字符指针变量。 n:读取字符个数(n-1)。 fp:文件指针变量。,8.4 文件的读写,8.4.2 文件的字符串输入输出函数,1. 字符串输入函数fgets( ),函数功能: 从fp所指向的文件中,读取n-1个字符后,加上字符串结束标志0组成一个字符串,存入字符数组中。 若输入操作成功,返回字符数组的首地址; 若文件结束或输入操作失败,则返回NULL。,fgets(char str ,int n,FILE *fp);,21,8.4 文件的读写,8.4.2 文件的字符串输入输出函数,1. 字符串输入函数fgets( ), 从文件读取字符的过程中,如果读到回车符(15)舍去,如果读到换行符(12)仍按字符读出,再加上 0 作为一个字符串,同时结束文本行读取操作,函数正常返回。当读到文件结束时,直接加上0作为一个字符串,函数正常返回。 fgets与gets函数的区别:gets函数以换行符作为行结束标志,并舍去换行符。fgets函数也以换行符作为行的读结束标志,但换行符同时还作为字符串的内容。因此可将含有换行符的文本文件看作是由一行一行字符组成的。,22,常用的调用形式:,8.4 文件的读写,8.4.2 文件的字符串输入输出函数,2. 字符串输出函数fputs( ),函数功能: 将字符串(可以是字符串常量或字符指针,不包括字符串结束标志0)写到文件指针所指向的文件中。 若输出操作成功,返回非0值; 若输出操作失败,则返回0。,fputs(字符串,文件指针),23,8.4 文件的读写,8.4.2 文件的字符串输入输出函数,2. 字符串输出函数fputs( ),fputs与puts函数的功能类似,它们的区别: puts函数能将字符串的结束标志 0 转换成 n 输出,因此字符串在显示器输出后,光标移至下一行;而fputs函数对字符串结束标志 0 的处理仅仅是将其舍去。,24,8.4 文件的读写,8.4.2 文件的字符串输入输出函数,【例8.1】从键盘输入一行字符,用fputc函数写入string文件中,再把该文件内容用fgetc函数读出显示在屏幕上。然后用fputs函数向string文件中追加一个字符串,再从string文件中用fgets函数读入一个含17个字符的字符串。 #include void main() FILE *fp; char ch, st20,str18;,25,8.4 文件的读写,8.4.2 文件的字符串输入输出函数,if(fp=fopen(“string“,“wt+“)=NULL) printf(“Cannot open file strike any key exit!“); getch(); exit(1); printf(“input a string:n“); ch=getchar(); while (ch!=n) fputc(ch,fp); ch=getchar(); ,26,8.4 文件的读写,8.4.2 文件的字符串输入输出函数,rewind(fp); ch=fgetc(fp); while(ch!=EOF) putchar(ch); ch=fgetc(fp); printf(“n”); fclose(fp); if(fp=fopen(“string“,“at+“)=NULL) printf(“Cannot open file strike any key exit!“); getch(); exit(1); ,27,8.4 文件的读写,8.4.2 文件的字符串输入输出函数,printf(“input a string:n“); scanf(“%s“,st); fputs(st,fp); rewind(fp); fgets(str,18,fp); printf(“%s“,str); fclose(fp); ,28
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号