int fseek(FILE *stream, long offset, int fromwhere);函数设置文件指针stream的位置。

如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset取值大于等于2*1024*1024*1024,即long的正数范围2G),则不改变stream指向的位置,函数返回一个非0值。

fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。

外文名

fseek

类    型

函数

领    域

计算机

注    意

不是定位文件指针

目录

  1. 1 功 能
  2. 2 头文件
  3. 3 用 法
  1. 4 描 述
  2. 5 返回值
  3. 6 程序例
  1. 7 注意事项

功 能

编辑

重定位流(数据流/文件)上的文件内部位置指针

注意:文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变或指向别的文件。

头文件

编辑

#include <stdio.h>

用 法

编辑

int fseek(FILE *stream, long offset, int fromwhere);

描 述

编辑

函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。

fseek函数和lseek函数类似,但lseek返回的是一个off_t数值,而fseek返回的是一个整型。

返回值

编辑

成功,返回0,失败返回非0值,并设置error的值,可以用perror()函数输出错误。

fseek position the file(文件) position(位置) pointer(指针) for the file referenced by stream to the byte location calculated by offset.

程序例

编辑

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#include <stdio.h>

long filesize(FILE*stream);

int main(void)

{

FILE *stream;

stream=fopen("MYFILE.TXT","wb+");

fprintf(stream,"Thisisatest");

printf("FilesizeofMYFILE.TXTis%ldbytes\n",filesize(stream));

fclose(stream);

return 0;

}

long filesize(FILE*stream)

{

long curpos,length;

curpos=ftell(stream);

fseek(stream,0L,SEEK_END);

length=ftell(stream);

fseek(stream,curpos,SEEK_SET);

return length;

}

int fseek( FILE *stream, long offset, int origin );

第一个参数stream为文件指针

第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移

第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET

SEEK_SET: 文件开头

SEEK_CUR: 当前位置

SEEK_END: 文件结尾

其中SEEK_SET,SEEK_CUR和SEEK_END依次为0,1和2.

简言之:

fseek(fp,100L,0);把stream指针移动到离文件开头100字节处;

fseek(fp,100L,1);把stream指针移动到离文件当前位置100字节处;

fseek(fp,-100L,2);把stream指针退回到离文件结尾100字节处。

使用实例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

#include<stdio.h>

#define N 5

typedef struct student{

  long sno;

  char name[10];

  float score[3];

}STU;

 

void fun(char*filename,STU n)

{

  FILE*fp;

  fp=fopen(filename,"rb+");

  fseek(fp,-1L*sizeof(STU),SEEK_END);

  fwrite(&n,sizeof(STU),1,fp);

  fclose(fp);

}

 

int main()/*修改覆盖最后一个学生数据*/

{

  STU t[N]={

    {10001,"MaChao",91,92,77},

    {10002,"CaoKai",75,60,88},

    {10003,"LiSi",85,70,78},

    {10004,"FangFang",90,82,87},

    {10005,"ZhangSan",95,80,88}

  };

  

  STU n={10006,"ZhaoSi",55,70,68},ss[N];

  int i,j;FILE*fp;

  

  fp=fopen("student.dat","wb");

  

  fwrite(t,sizeof(STU),N,fp);

  

  fclose(fp);

  

  fp=fopen("student.dat","rb");

  

  fread(ss,sizeof(STU),N,fp);

  

  fclose(fp);

  

  printf("\nThe original data:\n\n");

  

  for(j=0;j<N;j++)

  {

    printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);

    for(i=0;i<3;i++)

        printf("%6.2f",ss[j].score[i]);

    printf("\n");

  }

  fun("student.dat",n);

  printf("\nThe data after modifing:\n\n");

  fp=fopen("student.dat","rb");

  fread(ss,sizeof(STU),N,fp);

  fclose(fp);

  for(j=0;j<N;j++)

  {

    printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);

    for(i=0;i<3;i++)

        printf("%6.2f",ss[j].score[i]);

    printf("\n");

  }

  return 0;

}

注意事项

编辑

fseek函数的文件指针,应该为已经打开的文件。如果没有打开的文件,那么将会出现错误。 fseek函数也可以这样理解,相当于在文件当中定位。这样在读取规律性存储文件时可以利用其OFFSET偏移量读取文件上任意的内容。

fseek函数一般用于二进制文件,也可以用于文本文件。用于文本文件操作时,需特别注意只有fseek(fp, 0, SEEK_SET) 和 fseek(fp, ftell(fp), SEEK_SET)能确保结果符合预期。

C语言--fseek()相关推荐

  1. C 语言fseek, ftell调用失败(fseek返回非零值,ftell返回-1)

    C 语言fseek. ftell调用失败(fseek返回非零值,ftell返回-1) 太长不看版 fseek调用失败,返回非零值,是因为传入的参数超过了文件尾,或者文件大于2G,需要使用fseek的6 ...

  2. C语言fseek、ftell和rewind函数详解

    对于文件的读写方式,C 语言不仅支持简单地顺序读写方式,还支持随机读写(即只要求读写文件中某一指定的部分).对顺序读写方式来说,随机读写方式需要将文件内部的位置指针移动到需要读写的位置再进行读写,这通 ...

  3. C语言fseek()函数(whence)重新定位文件指针位置

    C 标准库 - <stdio.h> 描述 C 库函数 int fseek(FILE *stream, long int offset, int whence) 设置流 stream 的文件 ...

  4. c语言fseek函数的总结

    头文件:#include <stdio.h> 函数原型:int fseek(FILE *stream, long offset, int fromwhere); 参数: stream:指向 ...

  5. C语言fseek函数了解

    fseek()函数 重定位流(数据流/文件)上的文件内部位置指针 注意: 不是定位文件指针,文件指针指向文件/流,文件指针

  6. C语言的文件随机访问fseek()和ftell()函数

    C语言的文件随机访问fseek()和ftell()函数 我们要讨论3个问题:fseek()和ftell()函数的工作原理.如何使用二进制流.如何让程序可移植. fseek()与ftell()的工作原理 ...

  7. C语言中fseek函数

    C语言fseek()函数:用来设定文件的当前读写位置 头文件: #include <stdio.h> 定义函数: int fseek(FILE * stream, long offset, ...

  8. f_lseek_C语言中lseek()函数和fseek()函数的使用详解

    C语言lseek()函数:移动文件的读写位置 头文件: #include #include 定义函数: off_t lseek(int fildes, off_t offset, int whence ...

  9. 如何将字符串转换为日期– Java

    在本教程中,我们将向您展示如何将String转换为java.util.Date . 许多Java初学者都被困在Date转换中,希望本摘要指南能以某种方式为您提供帮助. // String -> ...

  10. C/C++/Qt 文件操作 效率比较

    C/C++/Qt 文件操作 & 效率比较 1 介绍 2 比较结果 2.1 Linux平台上运行程序普遍比Windows上快:Windows下VC编译的程序一般运行比MINGW(MINimal ...

最新文章

  1. OpenAI数十亿代码训出Codex:能将英语翻译成代码,给四句话就能写个神经网络...
  2. 什么是奇异值?奇异值分解是什么?SVD分解详解及实战
  3. 2021,让 AI 不再野蛮生长
  4. 两个CSS样式生成网站
  5. appium 环境搭建(不推荐安装此版本appium,推荐安装appium desktop)
  6. Linux-(C/C++)生成并使用静态库/动态库
  7. aspx头部代码%@ Page Language=C# AutoEventWireup=true CodeFile=ceshi.aspx.cs Inherits=SM_ceshi %
  8. win10浏览器闪退_从没法用到真香!没想到改进了 3 年的 Windows 10 浏览器,竟然这么好用...
  9. AD 20 PCB 导入CAD图形错乱-问题笔记
  10. 图论 —— 染色法判断二分图
  11. android访问win10共享文件夹,手机怎么用ES浏览器访问Win10共享文件教程
  12. GlusterFS简介
  13. java.lang.Short常用方法
  14. MagicBook屏幕频闪解决方案(Windows、MacOS)
  15. 学生id号码是什么意思_教育ID号是什么
  16. 高性能数据库引擎 CoolHash 产品宣言 Fourinone4.0版新特性(转)
  17. 支付宝、微信小程序高频知识(汇总VS对比)
  18. [教程] 我家云刷armbian+安装LMS
  19. 全力推进加速到来的机器人时代 2022
  20. 万字详解数据仓库、数据湖、数据中台和湖仓一体

热门文章

  1. 下载Latex的IEEE模板
  2. 怎么做说课PPT课件?
  3. 开源中文分词FudanNLP
  4. (一)CGAL库应用:指定平面切割模型并用openGL显示该层面轮廓
  5. 灰度到伪彩色的转换公式
  6. session 的工作原理?
  7. ggplot2的中文显示
  8. STM32F7 I2S接口 WM8978 边播放 边录音
  9. 惠普服务器显示器接口类型,介绍:目前显示器主要接口
  10. arcgis 经纬度转大地坐标_arcgis下平面坐标与大地坐标的转换