深圳定制网站制作报价北京网站建设推荐华网天下
web/
2025/9/30 18:29:34/
文章来源:
深圳定制网站制作报价,北京网站建设推荐华网天下,怀化市网站建设,网站开发最强工具C语言中文件定位函数主要是#xff1a;fseek, ftell, fsetpos, fgetpos。 先来讲前两个函数#xff0c;这是最基本的定位函数#xff1a; fseek函数#xff1a;能把文件指针移动到文件任何位置#xff0c;其原型是#xff1a;int fseek(FILE *fp, long offset, int fromw…C语言中文件定位函数主要是fseek, ftell, fsetpos, fgetpos。 先来讲前两个函数这是最基本的定位函数 fseek函数能把文件指针移动到文件任何位置其原型是int fseek(FILE *fp, long offset, int fromwhere); 参数解释第一个参数为要进行定位的文件的指针第二个参数为定位的偏移量一个有符号的long类型值正数表示文件指针向后偏移负数表示文件指针向前偏移0 表示不进行偏移第三个参数表示文件指针从哪个位置开始偏移有三个值可选SEEK_SET SEEK_CUR SEEK_END分别表示文件第一个字节即第零个位置文件指针当前所指字节即当前位置和文件EOF位置。 返回值返回 0 表示操作成功返回非 0 表示操作失败。 其他注意该函数不能定位到第一个字节之前的位置如果尝试这样操作会导致fseek返回 -1即操作失败比如这样的代码“j fseek(fp, -4L, SEEK_SET );”其中 j 值就是 -1但是该函数能定位到EOF位置之后的位置并且不报错即使这样是没有意义的比如这样的代码“j fseek(fp, 4L, SEEK_END)”返回值 j 是 0并且此时 ftell(fp) 返回值是SEEK_END 4。 ftell函数能返回当前文件指针所在的位置文件的第一个字节所在位置是零其原型是long ftell(FILE *fp); 参数解释有且仅有一个参数为一个文件的指针。 返回值有符号long类型的正向值即0~2147483647。 其他注意暂无。 实际上前两个函数对文件指针的定位虽然都很方便但是它们都有一个局限性那就是它们能定位的最大字节是依据 long 类型的取值范围决定。比如 fseek(fp, max_pos, SEEK_SET);它能移动的最大偏移量是 max_pos 2147483647字节即1GB对于大于1GB的文件来说就力不从心了。 所以ANSI C推出了解决大文件定位的方案即后两个函数不过即使是现在直接处理一个超过1G的单文件还是比较少的 在说这两个函数之前先要介绍一个数据类型fpos_t它是一个结构体类型保存着文件指针的位置并且这种数据类型只能被fgetpos和fsetpos函数使用。 fsetpos函数将文件指针的位置设置为fpos_t类型变量所保存的位置其原型是int fsetpos(FILE *, const fpos_t *) 参数解释第一个参数为一个文件的指针第二个参数为一个fpos_t类型的指针。 返回值0 表示操作成功非 0 表示操作失败。 其他注意暂无。 fgetpos函数将文件指针的位置保存到fpos_t类型变量中其原型是int fgetpos(FILE *, fpos_t *) 参数解释同fsetpos。 返回值同fsetpos。 其他注意暂无。 总结后两个函数通常是fseek函数偏移累加之后超过long范围时才用到例如如下代码 fpos_t pos;
//定义一个fpos_t类型的变量pos
f fopen(a.txt, r);
//假设a.txt是一个超过1G的文件
fseek(f, 2000000000L, SEEK_SET);
//向后偏移20亿字节
fseek(f, 1000000000L, SEEK_CUR);
//再向后面偏移10亿字节
//此时文件指针的位置已经超过了signed long的正向范围就需要用fpos_t类型变量来保存文件指针位置了
fgetpos(f, pos);
//此时当前文件指针的位置已保存到pos变量中了
fseek(f, 5000L, SEEK_CUR);
printf(%x\n, getc(f));
//再向后偏移5千字节并取出偏移后所在的字节以十六进制打印出来
fsetpos(f, pos);
//利用fsetpos函数重置文件指针根据最后一次fgetpos保存的pos值这次函数操作将向前偏移5千字节
printf(%x\n, getc(f));
//以十六进制打印出当前字节
fclose(f);
//释放文件流 上述代码可能有点抽象因为你可能一时间找不到大于1G的文件那么我们就用小文件来演示一下 假设文件utf8.txt的十六进制结构如下 41 42 43 56 57 44 44 4B C语言代码如下 FILE * f1;
fpos_t pos;
f1 fopen(utf8.txt, r);
fseek(f1,2,SEEK_SET);
fgetpos(f1, pos);
fseek(f1,4,SEEK_SET);
printf(%x\n, getc(f1));
fsetpos(f1,pos);
printf(%x\n, getc(f1));
fclose(f1); 输出结果 5743Press any key to continue转载于:https://www.cnblogs.com/ryzz/p/9357158.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84585.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!