【C语言】文件随机读取

说明

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

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

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

函数 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
发表评论 / Comment

用心评论~