[语法]文件的随机访问-fseek

  • fseekANSI C函数:使用fseek可以实现文件FILE*的随机访问
    int fseek(FILE *stream, long offset, int mode);注:本篇只讨论在“读”文件时候的随机访问技术 

    参数
    stream: 文件指针
    offset: 一个整数,表示偏移值
    mode : 相对位置
    返回值
    0,操作成功;-1,操作失败

     

    跳到第100个字节的位置
    fseek(fp, 100, SEEK_SET);

    跳到倒数100字节的位置
    fseek(fp, 100, SEEK_END);

    跳到当前位置往前100个字节
    fseek(fp, -100, SEEK_CUR);
    跳到当前位置往后100个字节
    fseek(fp, 100, SEEK_CUR);
    什么叫“当前位置”??

文件位置指示器 file-offset indicator
每个被打开的文件对象FILE*,其数据结构里都有一个位置指示器,表示当前的读/写位置。(当前位置到文件头的距离)

当fopen打开文件时,位置指示器的值为0
当fread读取字节时,位置指示器的值会增加相应的字节数
例如,读取128个字节,则位置指示器的值就增加 128,继续fread,则继续增加
当fseek时,会调整位置指示器的值
例如,fseek(fp, 100, SEEK_SET)则位置 指示器的值被设定为100。fseek(fp, 100, SEEK_END)则指示器的值为filesize-100。

 

举例:
文件中按字节保存了100个struct对象的数据,每个对象使用了字节数是一样的。

读第80个对象的数据

Student stu;
fseek(fp, 79* sizeof(Student), SEEK_SET);
fread(&stu, 1, sizeof(Student), fp);

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注