为了账号安全,请及时绑定邮箱和手机立即绑定

使用fseek去读一个BIN文件,无法seek,非常困惑,首先路径是正确的,已经检测很多遍了。

使用fseek去读一个BIN文件,无法seek,非常困惑,首先路径是正确的,已经检测很多遍了。

小唯快跑啊 2023-03-18 17:13:53
fseek(“我的BIN”, 10 , 0); fseek返回为0,接着读buffer也读不出来这绝对不是一个低级问题,我检查很多遍,其它BIN文件就可以fseek 10bytes 然后读数据,BIN的数据我看过了,丛10bytes 后的数据 16 进制是正确的。
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

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);把文件内部指针移动到离文件开头100字节处;
  fseek(fp,100L,1);把文件内部指针移动到离文件当前位置100字节处;
  fseek(fp,-100L,2);把文件内部指针退回到离文件结尾100字节处。


查看完整回答
反对 回复 2023-03-21
?
潇湘沐

TA贡献1816条经验 获得超6个赞

我前几天也碰到fseek问题,体会颇深。
几点建议:
1、你打开的方式是什么?比如r还是rb?这两者差别特别大。
2、暂且不论r或rb,你这个文件从开头到10的位置是什么字符,空格?空行?ASCII字符?或者其他?建议找个可以查看16进制的软件打开看看,比如Ultraedit。然后再觉得偏移量是多少。
3、由于文件需要打开才能操作,检查一下路径和函数使用问题。如果是当前目录,那直接fp=fopen("我的BIN","rb")或者 fp=fopen("我的BIN","r"),再fseek(fp,10,0)。如果不是当前目录,记得目录符号"\"在C语言里头需要使用转义字符才能实现,也就是"\\"才能实现"\",比如fp=fopen("c:\\我的BIN","rb")。

基本上以上三点可以解决fseek读不出内容的问题。

查看完整回答
反对 回复 2023-03-21
  • 2 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信