3.文件的随机读写
有时用户想直接读取文件中间某处的信息,若用文件的顺序读写必须从文件头开始直到要求的文件位置再读,这显然不方便。Turbo C2.0提供了一组文件的随机读写函数,即可以将文件位置指针定位在所要求读写的地方直接读写。
文件的随机读写函数如下:
int fseek (FILE *stream, long offset, int fromwhere);
int fread(void *buf, int size, int count, FILE *stream);
int fwrite(void *buf, int size, int count, FILE *stream);
long ftell(FILE *stream);
fseek()函数的作用是将文件的位置指针设置到从fromwhere开始的第offset字节的位置上,其中fromwhere是下列几个宏定义之一:
文件位置指针起始计算位置fromwhere
━━━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数 数值 含义
───────────────────────────
SEEK_SET 0 从文件开头
SEEK_CUR 1 从文件指针的现行位置
SEEK_END 2 从文件末尾
━━━━━━━━━━━━━━━━━━━━━━━━━━━
offset是指文件位置指针从指定开始位置(fromwhere指出的位置)跳过的字节数。它是一个长整型量,以支持大于64K字节的文件。fseek()函数一般用于对二进制文件进行操作。
当fseek()函数返回0时表明操作成功, 返回非0表示失败。下面程序从二进制文件test_b.dat中读取第8个字节。
例13:
#include<stdio.h>
main()
{
FILE *fp;
if((fp=fopen("test_b.dat", "rb"))==NULL)
{
printf("Can't open file");
exit(1);
}
fseek(fp, 8. 1, SEEK_SET);
fgetc(fp);
fclose(fp);
}
fread()函数是从文件中读count个字段,每个字段长度为size个字节,并把它们存放到buf指针所指的缓冲器中。
fwrite()函数是把buf指针所指的缓冲器中,长度为size个字节的count个字段写到stream指向的文件中去。
随着读和写字节数的增大,文件位置指示器也增大,读多少个字节,文件位置指示器相应也跳过多少个字节。读写完毕函数返回所读和所写的字段个数。
ftell()函数返回文件位置指示器的当前值,这个值是指示器从文件头开始算起的字节数,返回的数为长整型数,当返回-1时,表明出现错误。