{{format('0')}} {{format('555')}} {{format('1262')}}

【C语言】文件随机读取 [ 编程杂谈 ]

大数据男孩 文章 正文

想做一个技术博客,奈何实力不够
分享

明妃

{{nature("2022-08-14 17:23:19")}}更新

说明

在文件读取时,一般是从头读到尾,但我想读取文件中间的某部分的内容时,这样不可取

在文件读取时会有一个文件指示器,通过控制这个指示器 读取文件时指示的位置,来达到自定义位置开始读。

获取当前文件指示器 指示 的位置

函数 ftell()

传入打开文件的 FILE 指针,就返回当前指示器指示的 位置

long int i = ftell(FILE *stream);

[mark]()

移动文件指示器 指示的 位置

函数 fseek()

用于设置文件流的位置指示器

#include <stdio.h>
...
int fseek(FILE *stream, long int offset, int whence);

参数

  • stream:FILE 对象的指针
  • offset:指定从 whence 参数的位置起偏移多少个字节
  • whence:
    • SEEK_SET: 文件头
    • SEEK_CUR: 当前的读写位置
    • SEEK_END: 文件末尾

返回值

  • 成功:
    • 返回值是 0;
  • 失败:
    • 非 0 值
fseek(fp,2,SEEK_SET); // 文件头 向后偏移 2 字节

fseek(fp,2,SEEK_CUR); // 当前位置 向后偏移 2 字节

fseek(fp,1,SEEK_END); // 从文件位 向后偏移 1 字节

[mark]()

可移植性问题

对于代码的可移植性,可能还需要考虑一下问题:

  • 对于二进制模式打开的文件,fseek() 函数在某些操作系统可能不支持 SEEK_END 位置
  • 对于以文本模式打开的文件,fseek()whence参数 只能 取 SEEK_SET才是有意义的,并且传递给 offset参数的值要么是 0 ,要么是上一次对同一个文件调用ftell()函数获得的返回值

补充

3大系统的换行符:

  • Windows 系统:\r\n
  • Mac 系统:\r
  • Linux 系统:\n
评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Spark 2.0 单机模式与集群模式 安装

{{nature('2020-01-02 16:47:07')}} {{format('12520')}}人已阅读

TOP 3
Office 2016 Pro Plus 激活

{{nature('2019-12-11 20:43:10')}} {{format('9408')}}人已阅读

TOP 4
Linux上 MySQL 开启远程登陆的两种方法

{{nature('2019-12-26 17:20:52')}} {{format('7404')}}人已阅读

TOP 5
Linux 安装 MySQL 5.7

{{nature('2019-12-26 16:03:55')}} {{format('4878')}}人已阅读

目录

标签云

C语言 文件操作

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏