🚩write in front🚩
🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~2022博客之星Top63~作者周榜84﹣作者总榜704~阿里云专家博主 & 阿里云星级博主~掘金优秀创作者⇿InfoQ创作者⇿51CTO红人⇿全网访问量50w+🏅
🆔本文由 謓泽 原创 如需转载还请通知⚠
📝个人主页-謓泽51Ctop的博客📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏-謓泽51Ctop的博客_【C语言】从0~1_51CTO博客🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
🍑🍑🍑文件的随机读写🍑🍑🍑
当然在上述我所说的都是顺序的读写,那么现在我们开始讲解下什么是随机读写。
张三:那个謓泽为什么需要有随机读写呢,我用文件读写它难道不香吗(⊙x⊙;)
我:张三同学出现文件的随机读写绝对是有它的一个好处的,不然为什么它会被出现呢。那么就来和你说说文件随机读写的好处。
好处→速度快,便于进行数据处理。这个就是文件随机读写的好处。
但是,有好处必有坏处。事物都是会具有两面性的。
缺点→占用内存较大。
我:张三同学你明白了没。
张三:GET到了(●’◡’●),但是文件什么是随机读写。
如下图所示↓
🍓🍓fseek() – 重新定位流位置指示器🍓🍓
📢fseek() 函数声明方式如下↓
int fseek ( FILE * stream, long int offset, int origin );
- 重新定位流位置指示器
将与流关联的位置指示器设置为一个新位置。
对于以二进制模式打开的流,新位置是通过在origin指定的参考位置上添加偏移量来定义的。
对于以文本模式打开的流,offset要么为零,要么为之前调用ftell时返回的值,而origin必须为SEEK_SET。
如果函数调用这些参数的其他值,支持取决于特定的系统和库实现(不可移植)。成功调用文件结束符后,流的文件结束符内部指示器将被清除。
- 参数功能如下↓
stream→指向标识流的FILE对象的指针。
offset→二进制文件:从原始文件偏移的字节数。
origin→作为偏移量参考的位置。它由
中定义的下列常量之一指定,专门用作该函数的参数如下↓
- SEEK_SET:开头的文件。
- SEEK_CUR:文件指针的当前位置。
- SEEK_END:最后的文件。
- 这里我们用 SEEK_CUR 来举例子如下代码所示↓
运行结果🖊
上述图中不知道你看懂了没有,我画的应该还不错吧(✿◕‿◕✿)
🍓🍓ftell() – 获取流中的当前位置🍓🍓
📢ftell() 函数声明方式如下↓
long int ftell ( FILE * stream );
- 获取流中的当前位置
返回流的位置指示器的当前值。
对于二进制流,这是从文件开始的字节数。
对于文本流,数值可能没有意义,但仍然可以使用fseek将位置恢复到相同的位置(如果使用ungetc返回的字符在被读取时仍然挂起,该行为是未定义的)。
- 参数如下↓
stream→指向标识流的FILE对象的指针。
- 返回值↓
如果成功,将返回文件指针对于起始位置的偏移量。
失败时,返回-1L,并将errno设置为特定于系统的正值。
- 示例代码如下↓还是上面的代码为例
🍦ftell()🍦 可以告知我们偏移量的值的大小是多少。
拓展→🍅rewind(FILE * stream)🍅能让文件指指针位置回到起始的地址。