【C语言】文件随机读取 [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:19")}}更新说明
在文件读取时
,一般是从头读到尾
,但我想读取
文件中间的某部分
的内容时,这样不可取
。
在文件读取时会有一个文件指示器
,通过控制这个指示器
读取文件时指示的位置
,来达到自定义位置
开始读。
获取当前文件指示器 指示 的位置
函数 ftell()
传入打开文件的 FILE 指针
,就返回当前指示器指示的 位置
long int i = ftell(FILE *stream);
[]()
移动文件指示器 指示的 位置
函数 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 字节
[]()
可移植性问题
对于代码的可移植性,可能还需要考虑一下问题:
- 对于
二进制模式
打开的文件,fseek()
函数在某些操作系统
可能不支持 SEEK_END 位置
- 对于以
文本模式
打开的文件,fseek()
的whence参数 只能 取 SEEK_SET
才是有意义的,并且传递给offset参数
的值要么是0
,要么是上一次
对同一个文件调用ftell()
函数获得的返回值
。
补充
3大系统的换行符:
- Windows 系统:
\r\n
- Mac 系统:
\r
- Linux 系统:
\n
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}