ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

计算机科学类专升本复习之“C语言rewind和fseek函数的用法“详解(初稿)

2022-02-06 18:33:55  阅读:149  来源: 互联网

标签:fp 文件 函数 读写 fseek C语言 专升本 移动


C语言rewind和fseek函数的用法详解(随机读写文件)

前面所讲到的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据。

但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写。

这种读写方式称为随机读写,也就是说从文件的任意位置开始读写。

实现"随机读写"的 关键 是要"按要求移动位置指针",这称为"文件的定位"。

一、文件定位函数"rewind()函数"和"fseek()函数"

移动"文件内部位置指针"的函数主要有两个

即 rewind() 和 fseek()。

rewind()函数 用来将 "位置指针" 移动到 "文件开头"。

前面已经多次使用过,它的原型为:

    void rewind(FILE *fp);

fseek()函数 用来将 "位置指针" 移动到 "文件末尾"。

它的原型为:

    int fseek(FILE *fp,long offset,int origin);

参数说明:

1. fp 为 文件指针,也是"被移动的文件"

2. offset为"偏移量",也就是要"移动"的字节数。

之所以为long类型,时希望"移动"的范围更大,能处理的文件更大。

offset为 "正" 时, "向后" 移动。

offse 为 "负" 时, "向前" 移动。

3. oringin为"起始位置",也就是"从何处开始计算偏移量"。

C语言规定的"起始位置"有三种,分别为"文件开头、当前位置和文件末尾"。

每个位置都有相对应的"常量"来表示:

具体如下:

 起始点         常量名        常量值

文件开头        SEEK_SET        0

当前位置        SEEK_CUR        1

文件末尾        SEEK_END        2

例如,把位置指针移动到离文件开头100个字节处:

fseek(fp,100,0);



 

二、文件的随机读写

在"移动" 位置指针 之后,就可以用前面介绍的"任何一种" "读写函数" 进行读写了。

由于是"二进制文件",因此 常用"fread()函数"和"fwrite()函数"进行读写。

讲个程序例子吧:

//从键盘输入三组学生信息,保存到文件中,然后读取第二个学生的信息。

#include<stdio.h>



#define N 3

struct stu{

    char name[10]; //姓名

    int num;//学号

    int age;//年龄

    float score; //成绩

}boys[N],boy, *pboys;



int main()

{

    FILE *fp;

    int i;

    pboys = boys;

    if((fp=fopen("D:\\demo.txt","wb+")) == NULL)

    {

        printf("Cannot open file, press any key to exit!\n");

        getch();

        exit(1);

    }



    printf("Input data:\n");

    for(i=0;i<N;i++,pboys++)

    {

         scanf("%s %d %d %f", pboys->name, &pboys->num, &pboys->age, &pboys->score);

    }

    fwrite(boys, sizeof(struct stu), N, fp);  //写入三条学生信息

    fseek(fp, sizeof(struct stu), SEEK_SET);  //移动位置指针

    fread(&boy, sizeof(struct stu), 1, fp);  //读取一条学生信息

    printf("%s  %d  %d %f\n", boy.name, boy.num, boy.age, boy.score);

    fclose(fp);

    return 0;

}

运行结果:

Input data:

Tom 2 15 90.5↙

Hua 1 14 99↙

Zhao 10 16 95.5↙

Hua  1  14 99.000000

标签:fp,文件,函数,读写,fseek,C语言,专升本,移动
来源: https://blog.csdn.net/weixin_51563198/article/details/122800271

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有