函数功能:用于从一个以只读或读写方式打开的文件上读字符,从fp所值的文件中读取一个字符,并将位置指针指向下一个字符,若读取成功,则返回该字符,
若读取不成功则返回EOF(EOF是一个符号常量,stdio.h中定义为-1)
fputc()函数
函数原型:int fputc(int c, FILE *fp);
fp是由函数fopen()返回的文件指针,c是要输出的字符(尽管C定义为int型,但只写入低字节)
函数功能:该函数的功能是将字符c写到文件指针fp所指的文件上中,若写入错误返回EOF,否则返回字符c
文件的定位
文件的随机读写:文件的随机访问允许在文件中随机定位,并在文件的任何位置直接读写数据,为了实现文件的定位,在每一个打开的文件中,都有一个文件位置指针,
也称为文件位置标记,用来指向当前读写文件的位置,它保存了文件中的位置信息,当文件进行顺序读写时,每读完一个字节后,该位置指针自动移到下一个字节的位置,
当需要随机读写文件数据时,则需强制移动文件位置指针指向特定的位置
fseek()函数
函数原型:int fseek(FILE *fp,long offset,int fromwhere);
函数功能:将fp的文件位置指针从fromwhere开始移动offset个字节指示下一个要读取的数据的位置
offset是一个偏移量,它告诉文件位置指针要跳过多少字节,offset为正时,向后移动,为负时,向前移动,ANSIC要求位移量offset是长整型数据(常量数据后要加L),
这样当文件的长度大于64k时不至于出问题
fromwhere用于确定偏移量计算的起始位置,它的可能取值有3种,SEEK_SET或0,代表文件开始处,SEEK_CUR或1,代表文件当前位置,SEEK_END或2,代表文件结尾处,
通过指定fromwork和offset的值,可使位置指针移动到文件的任意位置,从而实现文件的随机读取,如果函数fseek()调用成功,则返回0值,否则返回非0值
两种特殊使用方式:
将读写位置移动到文件开头:fseek(FILE *stream,0,SEEK_SET);
将读写位置移动到文件尾:fseek(FILE *stream,0,0SEEK_END);
(fseek() 一般用于二进制文件,在文本文件中由于要进行转换,计算的位置有时会出错)
rewind()函数
函数原型:void rewind(FILE *fp);
函数功能:将文件位置指针指向文件首字节,即重置位置指针到文件首部
ftell()函数
函数原型:long ftell(FILE *fp);
函数功能:读取当前文件指针的位置,若函数调用成功,则返回文件的当前读写位置,否则返回-1L,函数ftell()用于相对于文件起始位置的字节偏移量来表示返回的当前位置指针
(需要注意的是,当用err = fopen_s(&fp, "E:\\ww.txt", "a+");打开文件后文件指针移到文件末尾,此时文件起始位置还是为文件头部并不是文件末尾)
文件检测
ferror()函数
函数原型:int ferror(FILE *stream);
函数功能:它的一般调用形式为 ferror(fp);如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。应该注意,对同一个文件 每一次调用输入输出函数,
均产生一个新的ferror函数值,因此,应当在调用一个输入输出函数后立即检 查ferror函数的值,否则信息会丢失。在执行fopen函数时,ferror函数的初始值自动置为0
feof()函数
函数原型:int feof(FILE *fp);
函数功能:检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被clearerr()函数清除