详解C语言中fseek函数和ftell函数的使用方法

fseek函数:

int fseek(FILE * _File, long _Offset, int _Origin);

函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败则不改变stream指向的位置,函数返回一个非0值。

超出文件末尾位置,还是返回0。往回偏移超出首位置,还是返回0,小心使用。

第一个参数stream为文件指针。

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

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

SEEK_SET:文件开头

SEEK_CUR:当前位置

SEEK_END:文件结尾

eg:

#include

#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

{

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

{

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;

}

ftell函数ftell函数用于得到文件位置指针当前位置相对与文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。

long len = ftell(fp)

eg1:

#include

int main( void )

{

FILE *stream;

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

fprintf( stream, "This is a test" );

printf( "The file pointer is at byte \

%ld\n", ftell( stream ) );

fclose( stream );

return(0);

}

eg2:

ftell一般用于读取文件的长度,下面补充一个例子,读取文本文件中的内容:

#include

#include

int main()

{

FILE *fp;

int flen;

char *p;

/* 以只读方式打开文件 */

if ( (fp = fopen( "1.txt", "r" ) ) == NULL )

{

printf( "\nfile open error\n" );

exit( 0 );

}

fseek( fp, 0L, SEEK_END ); /* 定位到文件末尾 */

flen = ftell( fp ); /* 得到文件大小 */

p = (char *) malloc( flen + 1 ); /* 根据文件大小动态分配内存空间 */

if ( p == NULL )

{

fclose( fp );

return(0);

}

fseek( fp, 0L, SEEK_SET ); /* 定位到文件开头 */

fread( p, flen, 1, fp ); /* 一次性读取全部文件内容 */

p[flen] = '\0'; /* 字符串结束标志 */

printf( "%s", p );

fclose( fp );

free( p );

return(0);

}

程序改进

#include

main()

{

FILE *myf;

long f1; /* 此处将f1设置为long 可以读取更长的文件 */

myf = fopen( "1.txt", "rb" );

fseek( myf, 0, SEEK_END );

f1 = ftell( myf );

fclose( myf );

printf( “ % d \ n ”, f1 );

}

相关阅读:

JS基于cookie实现来宾统计记录访客信息的方法

HTML页面中添加Canvas标签示例

JavaScript基础教程之alert弹出提示框实例

node.js中的http.createServer方法使用说明

JQuery中attr属性和jQuery.data()学习笔记【必看】

wap图片滚动特效无css3元素纯js脚本编写

ajax提交表单实现网页无刷新注册示例

js+css实现导航效果实例

node爬取微博的数据的简单封装库nodeweibo使用指南

js实现模拟银行卡账号输入显示效果

YII Framework框架使用YIIC快速创建YII应用之migrate用法实例详解

一串字字符中多个逗号替换为一个 既标准分隔符(正则表达式)

Win7桌面右下角设置炫丽时钟让其更个性

如何在php中正确的使用json

php fseek函数,C++_详解C语言中fseek函数和ftell函数的使用方法,fseek函数:int fseek(FILE * _ - phpStudy...相关推荐

  1. php seekdir,C++_详解C语言中telldir()函数和seekdir()函数的用法,C语言telldir()函数:取得目录流 - phpStudy...

    详解C语言中telldir()函数和seekdir()函数的用法 C语言telldir()函数:取得目录流的读取位置头文件: #include 定义函数: off_t telldir(DIR *dir ...

  2. C语言中定义常量的关键字是什么,C++_详解C语言中const关键字的用法,关键字const用来定义常量,如 - phpStudy...

    详解C语言中const关键字的用法 关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const ...

  3. c语言rand函数的作用,详解C语言中rand函数的使用

    前言 我们在编程实现算法的过程中,往往需要使用到随机数.由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?).所以计算机生成的是伪随机数,供我们使用. 我们使用C语言的ran ...

  4. c语言while函数作用,详解C语言中的while语句

    什么是C语言的while语句?它的作用是什么呢?估计很多初学者对此都是一知半解.下面课课家笔者就为大家详细解释C语言中的while语句的含义和作用. 首先笔者先给大家介绍C语言中的共有的三大常用的程序 ...

  5. c语言char数组和short数组的区别,详解C语言中Char型指针数组与字符数组的区别

    详解C语言中Char型指针数组与字符数组的区别 详解C语言中Char型指针数组与字符数组的区别 1.char 类型的指针数组:每个元素都指向一个字符串,指向可以改变 char *name[3] = { ...

  6. c语言中的fscanf是啥意思,详解C语言中fgets和fscanf区别

    fscanf函数是C语言的文件格式读取函数的方法之一,它使用空格.制表符和回车来分割不同的单词,这样可以让我们使用起来更方便,下面就让爱站技术频道小编带你来学习详解C语言中fgets和fscanf区别 ...

  7. 地面指示标志_详解消防应急照明和疏散指示系统的施工及安装方法消防施工

    详解消防应急照明和疏散指示系统的施工及安装方法消防施工 消防应急照明与疏散指示系统在生活中随处可见,相信您并不陌生,它是为人员疏散.消防作业提供照明和疏散指示的系统,由各类消防应急灯具及相关装置组成. ...

  8. java sleep唤醒_详解Java中的线程让步yield()与线程休眠sleep()方法

    Java中的线程让步会让线程让出优先级,而休眠则会让线程进入阻塞状态等待被唤醒,这里我们对比线程等待的wait()方法,来详解Java中的线程让步yield()与线程休眠sleep()方法 线程让步: ...

  9. python3多行输入字符串_详解Python3 定义一个跨越多行的字符串的多种方法

    方法一:使用三引号 >>> str1 = '''Le vent se lève, il faut tenter de vivre. 起风了,唯有努力生存. (纵有疾风起,人生不言弃. ...

  10. 详解c语言中的qsort函数(有图)

    目录 目录 一.qsort函数是什么 1.自定义冒泡函数时遇到的问题 2.qsort函数的作用 (1)int整形数组排序(2)浮点型数组排序(3)字符数组排序 (4)结构体排序 二.qsort函数的原 ...

最新文章

  1. 为Visual Studio添加配色方案
  2. 农村黑产,才是真正的硬核朋克!
  3. 从烤箱到蒸烤箱、到蒸烤箱集成灶,功能做加法,价格做乘法
  4. 用u盘做引导,往硬盘中安装ubuntu
  5. C# 删除指定目录下具有某后缀的全部文件
  6. JAVA输出希腊union,希腊文化认为,最为抽象的艺术形式是()。
  7. 程序员修神之路--打通Docker镜像发布容器运行流程
  8. [大数据行业应用发展前景分析] 阿里潘永花报告:大数据产业将成为新的煤和石油介绍...
  9. 【英语学习】【English L06】U08 News L1 It's really a magical book!
  10. MapReduce之RecordWriter理解
  11. 【安全】安装phpLDAPadmin管理LDAP
  12. C++ 中的友元(friend)
  13. 安全专家:70GB财务数据被僵尸网络盗窃
  14. 【cf:1100F】 Ivan and Burgers(多次区间最大异或值查询----线性基+离线+思维)
  15. 问题:虚拟机安装Ubuntu时,显示PXE-MOF:Exiting Intel PXE ROM.Operating Systen not found
  16. Python库-pandas详解
  17. 福建农林大学计算机课程表,福建农林大学课程表.doc
  18. VS本地项目如何发布到服务器详细流程(IIS部署 发布网站)
  19. Leetcode实战:121.买卖股票的最佳时机
  20. 2021年浙大考研计算机专业录取分数线,浙江大学2021年计算机考研拟录取数据分析...

热门文章

  1. 谈demo、原型、产品的区别
  2. opengl超级宝典(第5版)的环境搭建
  3. 深入解析Windows操作系统之基础概念和术语
  4. QQ for Linux 安装和卸载
  5. UNIX 环境高级编程之我见
  6. Codejock.Xtreme.Toolkit.Pro.v15.3.1 for MFC 15种皮肤切换
  7. html编写qq整人代码,vbs代码大全?vbs整人代码?qq代码大全?常用VBS代码 值得一看
  8. win7 计算机定时关机脚本,win7定时关机设置及命令
  9. 关闭OpenSSH UseDNS选项加速SSH登录
  10. xp计算机位数,XP查看电脑系统版本是32位还是64位的方法