一、文件的基本概念
1.文件概述:“文件”一般是指存储在外部介质上的一组数据的有序集合。c语言将文件看作是字符(字节)序列,即一个一个字符(字节)的数据舒徐组成。
文件名的一般形式为:文件名主干.扩展名
2.文件的分类
1)从用户的角度来看,文件可分为普通文件和设备文件。
普通文件是指驻留在外部介质上的一个有序数据集,可以是程序,也可以是一组待输入处理的原始数据,或者是一组输出的结果
设备文件是指与主机相连的各种外部设备。
2)按文件存储数据的内容来分,文件可分为程序文件和数据文件
程序文件存储的是程序。数据文件存储的是程序运行时所需要的数据
3)按文件中数据的存储方式来分,可分为文本文件(ASC||文件)和二进制文件
文本文件指的是由字符组成的文件,字符可以是字母、数字、运算符等,每个字符通过相应的编码存储在文件中。
3.缓冲文件系统
c语言提供了“缓冲文件系统”和“非缓冲文件系统”两套文件 *** 作函数来存取文件。
缓冲文件系统又称为标准文件系统。当使用标准I/O函数时,系统会自动在内存中为程序每一个正在使用的文件开辟一个“缓冲区”,作为程序与数据文件之间数据交换的媒介。在读文件时,数据先被送到内存“缓冲区”,再从内存“缓冲区”将数据传递到程序数据区;当写文件时,首先将数据送到“缓冲区”,再从内存“缓冲区”将数据送到外部存储介质的指定文件中
二、文件的 *** 作流程(缓冲文件系统)
1.定义文件类型指针:是一个指向有关信息的指针
FILE* 指针变量 例如: FILE*fp;其含义是文件指针fp所指的是一个名为FILE的结构体类型
2.打开文件
“打开文件”是建立用户程序与文件的联系,系统为文件开辟文件缓冲区。
执行打开文件 *** 作是由库函数 fopen 完成。打开文件 *** 作是指为文件建立相应的信息区(用来存放有关文件的信息)和文件缓冲区(用来暂时存放输入输出的数据)。
在编写程序时,通常定义文件指针与打开文件同时进行,这样,在打开文件的同时,就指定了一个指针变量指向该文件,也就建立起指针变量与文件之间的联系,进而可以通过该指针变量对文件进行读写
3.读写 *** 作
1)文件读写位置标记:在c语言中,系统为每个文件设置了一个文件读写位置标记,用于指向当前的读写位置。文件读写位置标记的初始值可以按照用户所要进行的 *** 作自动初始化。
2)顺序读写方式与随机读写方式
打开文件,当要进行读或写时,文件读写位置标记的初始值为文件首。
顺序读写,指从文件首开始按顺序依次读写,每进行一次读或写,文件读写位置标记都会自动加1,指向下一个字符位置,为下次的读或写做准备,这种方式多用于文本文件。
随机读写,是允许人为地移动文件读写位置标记,将读写位置标记定位到指定位置,然后直接读写,这种方式多用于二进制。
三、文件的打开与关闭
1.文件的打开
c语言中文件的打开可通过系统提供的 fopen 函数实现,其函数调用的形式为:
文件指针名=fopen("文件名","使用文件方式");
1)文件指针名:文件指针名必须是被说明为FILE类型的指针变量。fopen函数在执行时返回一个FILE类型的指针,通常赋给一个文件指针变量。
例如:
FILE *fp; fp=fopen("file a","r");
其含义时在当前目录下打开文件file a,并使fp指向该文件,fp与被打开的文件建立了联系,其后对文件的读写 *** 作就可以通过fp来进行。
2)文件名:是被打开文件的文件名,包含路径和文件名两部分
例如:
FILE *fp; fp=("d:\abc.txt","r");
其含义是打开d盘根目录下 的abc.txt文件
3)使用文件方式:
以只读方式,打开一个文本文件。只读不写。该文件必须存在,不存在时返回错误标识
w
以只写方式,创建并打开一个文件。只写不读。文件不存在时建立新文件,存在时,原文件被覆盖。以读/写的方式建立一个新的文本文件。允许读和写。文件存在时打开文件,原文件清空;不存在则建立新文件
a.使用文件方式的取值
r(read):读取数据
w(write):写入数据
a(append):追加数据
t(text):文本文件,可省略不写
b(binary):二进制文件
+:可读取和写入
b.在打开一个文件时,如果出错,fopen函数将返回一个空指针值NULL。在程序中可以使用这一信息来判别是否完成打开文件的工作,并做出相应的处理,因此常用以下程序段打开文件:
if((fp=fopen("c:\student.txt","rb")==NULL) { printf("n error on open c:\ student.txt file !"); exit(1); }
2.文件的关闭
关闭文件可通过fclose函数实现,其调用形式为:
fclose(文件指针);
关闭文件就是使原来指向该文件的文件指针与文件脱离,以便再使用该文件指针时,不会对该文件进行读写 *** 作,除非再次打开文件。
fclose函数的返回值有0和非0两种。正常完成关闭文件 *** 作时,fclose函数返回值为0;如返回非0值则表示文件关闭失败。
三、文件的顺序读写
1.按字符读写文件(以字符为单位)
1)写字符函数:fputc,调用形式为:
fputc(字符量,文件指针); //把“一个”字符写入文件指针所指的文件中
a.参数“字符量”时要输入的字符,它可以说时一个字符常量,也可以是一个字符变量
b.每写入一个字符,文件读写位置标记向后移动一个字节
c.文件指针和文件读写位置标记的区别:文件指针是指向整个文件的,必须再程序定义中说明;文件读写位置标记用以指向文件内部的当前读写位置。
d.fputc函数有一个返回值,写入成功正确返回写入的字符,否则返回EOF(是stdio.h库函数文件中定义的符号常量,指为-1)
2)读字符函数:fgetc,调用形式为:
字符变量=fgetc(文件指针); //从文件指针所指向的文件中读一个字符
a.在fgetc函数调用中,读取的文件必须是以读或读写的方式打开
2.按字符串读写文件
1)写字符串函数:fputs,调用形式:
fputs(字符串,文件指针); //将字符串写入文件指针所指的文件中
a.fupts函数有返回值:写入成功返回正整数,否则返回EOF
b.字符串结束符补被写入文件。为了读取数据方便,设法使字符串分开,常常用fputs(“n”,fp)的语句在每个字符串后面加一个换行符存入文件中
2)读字符串函数:fgets,调用形式为:
fgets(字符数组,n,文件指针); //从文件指针所指的文件中读取一个字符串到字符数组中
例如:fgets(str,n,fp); 其含义使从fp所指的文件中读出n-1个字符送入字符数组str中
a.该函数从文件指针所指的文件中,读取的字符串补超过n-1个字符。当读满n-1个字符前,若遇到换行符或文件结束符(EOF),函数停止读 *** 作,并在字符串的最后一个字符后加上一串结束符“”。需要注意的是,如果遇到换行符,fgets函数将换行符也作为字符串的一部分读取
b.fgets函数的返回值是字符数组的首地址。若读取失败,则额返回空指针NULL
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)