🚩write in front🚩   

🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~2022博客之星Top63~作者周榜84﹣作者总榜704~阿里云专家博主 & 阿里云星级博主~掘金优秀创作者⇿InfoQ创作者⇿51CTO红人⇿全网访问量50w+🏅

🆔本文由 謓泽 原创 如需转载还请通知⚠

📝个人主页-​謓泽51Ctop的博客​📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

📣系列专栏-​謓泽51Ctop的博客_【C语言】从0~1_51CTO博客​🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

  【C语言】文件的随机读写。_读文件

🍑🍑🍑文件的随机读写🍑🍑🍑 

当然在上述我所说的都是顺序的读写,那么现在我们开始讲解下什么是随机读写。

张三:那个謓泽为什么需要有随机读写呢,我用文件读写它难道不香吗(⊙x⊙;)

我:张三同学出现文件的随机读写绝对是有它的一个好处的,不然为什么它会被出现呢。那么就来和你说说文件随机读写的好处。

好处→速度快,便于进行数据处理。这个就是文件随机读写的好处。

但是,有好处必有坏处。事物都是会具有两面性的。

缺点→占用内存较大。

我:张三同学你明白了没。

张三:GET到了(●'◡'●),但是文件什么是随机读写。

如下图所示↓

  【C语言】文件的随机读写。_#define_02

🍓🍓fseek() - 重新定位流位置指示器🍓🍓

📢fseek() 函数声明方式如下↓

int fseek ( FILE * stream, long int offset, int origin );  【C语言】文件的随机读写。_读文件_03

  • 重新定位流位置指示器

将与流关联的位置指示器设置为一个新位置。

对于以二进制模式打开的流,新位置是通过在origin指定的参考位置上添加偏移量来定义的。

对于以文本模式打开的流,offset要么为零,要么为之前调用ftell时返回的值,而origin必须为SEEK_SET。

如果函数调用这些参数的其他值,支持取决于特定的系统和库实现(不可移植)。成功调用文件结束符后,流的文件结束符内部指示器将被清除。

  • 参数功能如下↓

stream→指向标识流的FILE对象的指针。

offset→二进制文件:从原始文件偏移的字节数。

origin→作为偏移量参考的位置。它由<cstdio>中定义的下列常量之一指定,专门用作该函数的参数如下↓

  1. SEEK_SET:开头的文件。
  2. SEEK_CUR:文件指针的当前位置。
  3. SEEK_END:最后的文件。
  • 这里我们用 SEEK_CUR 来举例子如下代码所示↓
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
FILE* pf = fopen("test.txt", "r");
//返回值判断
if (pf == NULL)
{
perror("fopen");
return 1;//返回
}
//读取文件
int ret = fgetc(pf);
printf("%c", ret);

//SEEK_CUR→调整文件的指针
fseek(pf, 2, SEEK_CUR);

ret = fgetc(pf);
printf("%c", ret);

ret = fgetc(pf);
printf("%c", ret);

ret = fgetc(pf);
printf("%c", ret);

//关闭文件
fclose(pf);
pf = NULL;
return 0;
}

运行结果🖊 

  【C语言】文件的随机读写。_#define_04

上述图中不知道你看懂了没有,我画的应该还不错吧(✿◕‿◕✿) 

🍓🍓ftell() - 获取流中的当前位置🍓🍓

📢ftell() 函数声明方式如下↓

long int ftell ( FILE * stream );  【C语言】文件的随机读写。_字符串_05

  • 获取流中的当前位置

返回流的位置指示器的当前值。

对于二进制流,这是从文件开始的字节数。

对于文本流,数值可能没有意义,但仍然可以使用fseek将位置恢复到相同的位置(如果使用ungetc返回的字符在被读取时仍然挂起,该行为是未定义的)。

  • 参数如下↓

stream→指向标识流的FILE对象的指针。

  • 返回值↓

如果成功,将返回文件指针对于起始位置的偏移量。

失败时,返回-1L,并将errno设置为特定于系统的正值。

  • 示例代码如下↓还是上面的代码为例
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
FILE* pf = fopen("test.txt", "r");
//返回值判断
if (pf == NULL)
{
perror("fopen");
return 1;//返回
}
//读取文件
int ret = fgetc(pf);
printf("%c", ret);

//SEEK_CUR→调整文件的指针
fseek(pf, 2, SEEK_CUR);

ret = fgetc(pf);
printf("%c", ret);

ret = fgetc(pf);
printf("%c", ret);

ret = fgetc(pf);
printf("%c", ret);

int rets = ftell(pf);
printf("%d", rets);
//关闭文件
fclose(pf);
pf = NULL;
return 0;
}


  【C语言】文件的随机读写。_读文件_06

🍦ftell()🍦  可以告知我们偏移量的值的大小是多少。

拓展→🍅rewind(FILE * stream)🍅能让文件指指针位置回到起始的地址。