与文件的顺序读写不同,文件的随机读写是指可以从文件的任意位置开始读写数据。
fseek函数
函数的返回值以及参数格式:
该函数的作用是将文件指针移动到指定的位置,从该位置开始读写。包含三个参数,第一个参数为文件指针,第二个参数为文件指针的偏移量,第三个参数为文件指针的起始位置。如果成功,则该函数返回值为0,否则,返回非0值。
光标的起始位置可以选择如下三种:
第一种是在文件开头开始移动,第二种是在当前位置开始移动,第三种是在文件末尾开始移动。
fseek函数的具体使用方法如下:
可以看到,刚开始读取时,读到文件中第一个字符a,随后文件指针向后移动,再次读取,读到第二个字符b,接下来使用fseek函数,将文件指针移动到距离文件开头为0的位置处,即移动到文件开头,再次进行读取,读取出来的字符还是a。
输出结果为:
ftell函数
函数的返回值以及参数格式:
ftell函数的作用是得到当前文件指针与文件开头的距离,只有一个参数,即文件指针,返回值为当前文件指针的位置。
ftell函数的具体使用方法如下:
可以看到,在文件读取完第一个字符a后,使用fseek函数使文件指针移动到距离文件末尾-3的位置处,即将文件指针移动到倒数第三个字符处,得到倒数第三个字符,随后又使用ftell函数求出文件指针与文件开头的距离。
输出结果为:
rewind函数
函数的返回值以及参数格式:
rewind函数的作用是将文件指针移动到文件的起始位置。该函数的参数为文件指针,无返回值。
rewind函数的具体使用方法如下:
可以看到,我们得到文件中第一个字符后,将文件指针移动到距离文件末尾-3的位置处,继续打印一个字符,接下来使用rewind函数将文件指针移动到文件的起始位置,再次打印一个字符。
输出结果为:
注:rewind(fp)与fseek(fp,0,SEEK_SET)作用相同。
feof函数的作用
函数的返回值和参数格式如下:
该函数的参数为一个文件指针,如果正常遇到文件末尾结束,返回非0值,否则,返回0。
feof函数具体使用方法如下:
输出结果为:
注意:在⽂件读取过程中,不能⽤feof函数的返回值直接来判断⽂件的是否结束。
ferror函数的作用
函数返回值和参数格式如下:
该函数的参数是一个文件指针,若在文件读写过程中遇到文件错误,返回非0值,否则,返回0。
ferror函数的具体使用方法如下:
输出结果为:
可以看到,文件正常读取结束,没有碰到文件错误,那么碰到文件错误是什么样的呢?
接下来我们手动让文件读写发生错误,来看看会输出什么错误信息。
输出结果为:
可以看到,输出结果为文件描述错误,就是指我们在读写文件过程中发生错误。
feof函数和ferror函数作用总结:
总的来说,就是文件结束的原因有两个:
- 一是遇到文件末尾,正常结束,
- 一是文件在读写过程中发生错误,非正常结束。
feof函数就是用来判断文件是否是遇到末尾结束的,如果正常遇到文件末尾结束,返回非0,否则返回0。
ferror函数是用来判断文件是否发生错误结束的,如果发生错误导致文件结束,返回非0,否则返回0。