C语言fseek()函数:移动文件的读写指针到指定的位置

<上一节下一节>

分享到:
QQ空间
新浪微博
腾讯微博
豆瓣
人人网
C语言辅导班,帮助有志青年!全程一对一,永久学习,QQ在线,随时响应!
【C++辅导班】一对一辅导,快速学习,仅需50天,玩转C++开发,找到靠谱的工作!

头文件:#include <stdio.h>

fseek()函数可以移动文件的读写指针到指定的位置,即移动当前文件的位置指针,其原型为:
    int fseek(FILE * stream, long offset, int fromwhere);

【参数】stream为文件指针,offset为偏移量,fromwhere为指针的起始位置。

参数 offset 为根据参数 fromwhere 来移动读写位置的位移数。参数 fromwhere 为下列其中一种:

  • SEEK_SET:从距文件开头 offset 位移量为新的读写位置;
  • SEEK_CUR:以目前的读写位置往后增加 offset 个位移量;
  • SEEK_END:将读写位置指向文件尾后再增加 offset 个位移量。

当 fromwhere 为 SEEK_CUR 或 SEEK_END 时,参数 offset 允许负值的出现。

对于以二进制方式打开的文件流,移动后的位置为 fromwhere + offset。

对于以文本方式打开的文件流,offset 必须为 0 或 ftell() 函数的返回值,而且 fromwhere 必须为 SEEK_SET。

fseek() 函数一般用于二进制文件,也可以用于文本文件。用于文本文件操作时,需特别注意回车换行的情况:因为在一般浏览工具如UltraEdit中,回车换行视为两个字符0x0D和0x0A,但真实的文件读写和定位时却按照一个字符0x0A进行处理,因此碰到此类问题时,可以考虑将文件整个读入内存,然后在内存中手工插入0x0D的方法,这样可以达到较好的处理效果。

如果参数为其它值,那么结果将根据特定平台和库实现而定。

【返回值】成功返回 0,否则返回非 0 值。如果发生读写错误,将会设置设置文件错误标识。

注意:经笔者测试,超出文件末尾位置,还是返回 0。往回偏移超出首位置,返回-1,且指向一个 -1 的位置,请小心使用。

如果函数执行成功,将会设置文件结束标志,并将消除函数 ungetc() 的所有影响。

fseek()函数和lseek()函数类似,但lseek()返回的是一个 off_t 数值,而fseek()返回的是一个整型。而且 fseek() 不像 lseek() 会返回当前读写位置,必须使用ftell()来取得目前读写的位置。

如果以追加的方式(a+)打开文件,那么fseek()允许在读和写之间切换。

举两个例子:

  • 将读写位置移动到文件开头:fseek(fp, 0, SEEK_SET);
  • 将读写位置移动到文件尾时:fseek(fp, 0, SEEK_END);
  • 将读写位置动到离文件开头100字节处:fseek(fp,100L, SEEK_SET);
  • 将读写指针移动到离文件当前位置100字节处:fseek(fp,100L, SEEK_CUR);
  • 将读写指针退回到离文件结尾100字节处:fseek(fp, -100L, SEEK_END);

【实例】创建一个文件,写入数据后读取并显示出来。

  1. #include<iostream.h>
  2. #include<stdio.h>
  3. void main(void)
  4. {
  5. FILE* stream;
  6. long l;
  7. float fp;
  8. char s[81];
  9. char c;
  10. stream = fopen("fscanf.txt","w+");
  11. if(stream == NULL) // 打开文件失败
  12. {
  13. printf("the file is opeaned error!\n");
  14. }
  15. else // 输出信息
  16. {
  17. fprintf(stream,"%s %ld %f %c","a_string",6500,3.1415,'x'); // 格式化
  18. fseek(stream,0L,SEEK_SET); // 文件定位
  19. fscanf(stream,"%s",s);
  20. fscanf(stream,"%ld",&l);
  21. fscanf(stream,"%f",&fp);
  22. fscanf(stream," %c",&c);
  23. printf("%s\n",s);
  24. printf("%ld\n",l);
  25. printf("%f\n",fp);
  26. printf("%c\n",c);
  27. fclose(stream); // 关闭
  28. }
  29. }

输出结果:
a_string
6500
3.141500
x

程序首先创建一个文件,使用 fprintf() 函数往文件流中写入一些数据,然后使用 fseek() 函数把文件的当前读/写指针定位到 文件头,再使用 fscanf() 函数按格式逐个读取写入的数据并显示。

如何使用文件的fseek函数对文件指针进行操作相关推荐

  1. C语言 文件读写 fseek 函数 - C语言零基础入门教程

    目录 一.fseek 函数简介 二.fseek 函数实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.fseek 函数简介 fse ...

  2. python创建文件对象的函数_Python 文件对象常用内建方法

    学习python教程文件操作时,除了 文件对象读取内容 file.read(size):size为读字节的长度,默认为-1. file.readline(size):逐行读取,如果定义了size参数, ...

  3. C++常用头文件——常用数学函数头文件

    cmath头文件 cmath是c++语言中的标准库头文件.其中的 "c" 表示其中的函数是来自 C标准库,"math"表示为数学常用库函数.此文件原作为< ...

  4. C语言文件读写常用函数总结

    C语言文件读写常用函数总结 有点小头疼这几天复习,可是总是有些小可爱问有关C语言文件方面的内容,在此写篇博文一劳永逸. 目录 C语言文件读写常用函数总结 fopen函数 fclose函数 fseek函 ...

  5. python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解

    前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...

  6. python echo函数_python如何调用php文件中的函数详解

    前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...

  7. linux c 删除文件,linux c remove 删除文件或目录函数

    linux c remove 删除文件或目录函数 头文件:#include remove()函数用于删除指定的文件,其原型如下: int remove(char * filename); [参数]fi ...

  8. Python文件读取read()函数

    read().readline().readlines()函数支持以 **r.r+.rb.rb+**四种模式打开的文件. read()函数 如果文件是以文本模式(非二进制模式)打开的,则 read() ...

  9. python调用php_python如何调用php文件中的函数详解

    前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...

  10. C语言lseek()函数和 fseek()函数 rewind函数

    lseek():移动文件读写位置 头文件: #include <sys/types.h> #include <unistd.h> 定义函数: off_t lseek(int f ...

最新文章

  1. 从Google代码库找到的好东西
  2. 第二讲,我们来谈谈:“什么是二进制”
  3. 数据库-ADONET-向数据库提交更新
  4. 实战SSM_O2O商铺_46【Redis缓存】头条信息+商铺目录Service层加入缓存
  5. for oracle中pivot_Oracle PIVOT 行转列方法
  6. cdi 作用 spring_什么是CDI,它与@EJB和Spring有什么关系?
  7. 恒大紧急辟谣“资金链断裂”,股价止跌回升
  8. 2018网易校招前端笔试考后总结
  9. 漫画:什么是桶排序?
  10. 八爪鱼导出到mysql数据库_八爪鱼采集器怎么将数据导出数据库?
  11. 云计算的认识和看法_谈谈对于云计算的认识和理解
  12. SSR门户项目爬坑之路(三)
  13. 优维助力国内某省级商业银行同城异地灾备自动化建设
  14. 日本首相会见奥特曼,考虑引入 ChatGPT 技术
  15. 7.正则抓取页面内容
  16. Gentoo USE参数清单中文详解{转}
  17. Android,使用MMKV存储Bean实体对象
  18. javascript 之排列组合
  19. 解决Maven打包没有依赖jar包问题
  20. 【题解】绿豆蛙的归宿

热门文章

  1. 观察者模式和java委托
  2. C# 基础知识-09----.NET中SpecialFolder 类
  3. 0-1之间的随机数 C/C++
  4. 用xslt 把xml转换成html的几个实例(1)
  5. 3个开源TTS(二)eSpeak的简要分析使用
  6. Thingsboard 3.1.0 - 远程控制和GPIO状态显示
  7. 深入浅出Java8 Stream流:多实例详解
  8. Sql查询出数据表中所有重复的数据
  9. C++ 日志框架总结
  10. MySQL 表分区功能详解