1、nC语言文件概述语言文件概述n文件类型指针文件类型指针n文件的打开与关闭文件的打开与关闭n文件的读写文件的读写n文件定位函数文件定位函数0.本章内容本章内容1 1 1.C语言文件概述语言文件概述n文件:存储在外部介质上数据的集合。文件:存储在外部介质上数据的集合。n文件分类文件分类c语言把文件看作是一个字符的序列,即文件由一语言把文件看作是一个字符的序列,即文件由一个个字符的数据顺序组成,根据数据的组成形式可个个字符的数据顺序组成,根据数据的组成形式可分为分为ASCII文件和二进制文件文件和二进制文件n文本文件:文本文件:文件,每个字节存放一个字符的文件,每个字节存放一个字符的ASCII码码n
2、二进制文件:数据按其在内存中的存储形式原样存放二进制文件:数据按其在内存中的存储形式原样存放n文件处理方法文件处理方法缓冲文件系统:高级文件系统,系统自动为正在使缓冲文件系统:高级文件系统,系统自动为正在使用的文件开辟内存缓冲区用的文件开辟内存缓冲区非缓冲文件系统:低级文件系统,由用户在程序中非缓冲文件系统:低级文件系统,由用户在程序中为每个文件设定缓冲区为每个文件设定缓冲区2 2 2.文件类型指针文件类型指针n 在语言中用一个指针变量指向一个文件,这个在语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作
3、。的文件进行各种操作。n定义说明文件指针的一般形式为:定义说明文件指针的一般形式为:FILE FILE*指针变量标识符;指针变量标识符;其中其中FILEFILE应为大写,它实际上是由系统定义的一个结构,该结应为大写,它实际上是由系统定义的一个结构,该结构中含有文件名、文件状态和文件当前位置等信息。在编写源构中含有文件名、文件状态和文件当前位置等信息。在编写源程序时不必关心程序时不必关心FILEFILE结构的细节。结构的细节。n例如:例如:FILE FILE*fpfp;fp是一个指向是一个指向FILE类型结构的指针变量,通过文件指针变量类型结构的指针变量,通过文件指针变量能够找到与它相关的文件。
4、如果需要同时访问能够找到与它相关的文件。如果需要同时访问n个文件,一般个文件,一般应设应设n个指针变量,使它们分别指向个指针变量,使它们分别指向n个文件,以实现对文件个文件,以实现对文件的访问。的访问。3 3 3.文件的打开与关闭文件的打开与关闭n 对文件进行操作之前必须对文件进行操作之前必须“打开打开”文件,文件结文件,文件结束之后应该束之后应该“关闭关闭”文件文件。文件的打开和关闭是文件的打开和关闭是通过调用通过调用fopen和和fclose函数来实现的。函数来实现的。n文件打开(文件打开(fopen函数)函数)例例 FILE *fp;fp=fopen(“xxm.txt”,”r”);意义是
5、在当前目录下打开文件意义是在当前目录下打开文件xxm.txtxxm.txt,只允许进行,只允许进行“读读”操作,操作,并使并使fpfp指向该文件。指向该文件。n文件关闭(文件关闭(fclose函数)函数)/释放内存,并防止被误用释放内存,并防止被误用fclose函数调用的一般形式是:函数调用的一般形式是:fclose(文件指针文件指针);正常完成关闭文件操作时,正常完成关闭文件操作时,fclosefclose函数返回值为函数返回值为0 0。如返回非零。如返回非零值则表示有错误发生。值则表示有错误发生。4 4 4.文件的读写文件的读写n读文件字符函数读文件字符函数fgetc n从指定的文件中读一
6、个字符,函数调用的形式为:从指定的文件中读一个字符,函数调用的形式为:ch=fgetc(fp);从打开的文件从打开的文件fp中读取一个字符并送入中读取一个字符并送入ch中中n写字符函数写字符函数fputcn把一个字符写入指定的文件中,一般形式为:把一个字符写入指定的文件中,一般形式为:fputc(字符量,文件指针字符量,文件指针);把字符把字符a写入写入fp所指向的文件中所指向的文件中5 5 4.文件的读写文件的读写n读文件字符串函数读文件字符串函数fgets n从指定从指定的文件中读一个字符串到字符数组中,从指定从指定的文件中读一个字符串到字符数组中,函数调用的形式为:函数调用的形式为:fg
7、ets(str,n,fp);从从fp所指的文件中读出字符送入字符数组所指的文件中读出字符送入字符数组str中中n写文件字符串函数写文件字符串函数fputsn向指定的文件写入一个字符串,其调用形式为:向指定的文件写入一个字符串,其调用形式为:fputs(字符串字符串,文件指针文件指针);其中字符串可以是字符串常量,也可以是字符数组名,其中字符串可以是字符串常量,也可以是字符数组名,或指针变量,例如:或指针变量,例如:fputs(“abcd“,fp);把字符串把字符串“abcd”写入写入fp所指的文件之中。所指的文件之中。6 6 4.文件的读写文件的读写n读文件数据块函数读文件数据块函数fread
8、 n用于整块数据的读写函数。可用来读写一组数据,一用于整块数据的读写函数。可用来读写一组数据,一般形式为:般形式为:fread(buf,size,count,fp);从例如:从例如:fread(fa,4,5,fp);其意义是从其意义是从fp所指的文件中,每次读所指的文件中,每次读4个字节个字节(一个实数一个实数)送入实数送入实数组组fa中,连续读中,连续读5次,即读次,即读5个实数到个实数到fa中。写文件字符串函数中。写文件字符串函数fputsn数据块输出函数数据块输出函数fwriten向指定写数据块函数调用的一般形式为:向指定写数据块函数调用的一般形式为:fwrite(buffer,size
9、,count,fp);7 7 4.文件的读写文件的读写nfscanf函数,函数,fprintf函数与前面使用的函数与前面使用的scanf和和printf 函数的功能相似,都是格式函数的功能相似,都是格式化读写函数。但化读写函数。但fscanf函数和函数和fprintf函数的函数的读写对象不是键盘和显示器,而是磁盘文读写对象不是键盘和显示器,而是磁盘文件。件。n这两个函数的调用格式为:这两个函数的调用格式为:fscanf(文件指针文件指针,格式字符串格式字符串,输入表列输入表列);fprintf(文件指针文件指针,格式字符串格式字符串,输出表列输出表列);例如:例如:fscanf(fp,“%d%
10、s”,&i,s);fprintf(fp,“%d%c”,j,ch);8 8 5.文件定位函数文件定位函数n移动文件内部位置指针的函数主要有两个,移动文件内部位置指针的函数主要有两个,即即 rewind 函数和函数和fseek函数函数n置文件位置指针函数置文件位置指针函数rewind调用形式为:调用形式为:rewind(文件指针文件指针);功能是把文件内部的位置指针移到文件首。功能是把文件内部的位置指针移到文件首。n改变文件位置指针函数改变文件位置指针函数fseek调用形式为:调用形式为:fseek(文件指针文件指针,位移量位移量,起始点起始点);例:例:fseek(fp,100L,0);/把位置指针移到离文件首把位置指针移到离文件首100个字节处个字节处fseek函数一般用于二进制文件。在文本文件中由于要进行转换,函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。故往往计算的位置会出现错误。9 9