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

C++二进制文件读取时怎么定位

C++二进制文件读取时怎么定位

C++
肥皂起泡泡 2019-03-22 15:14:32
C++二进制文件读取时怎么定位
查看完整描述

2 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

楼主可知道有个函数叫做 fseek ?

1int fseek(FILE * stream, long offset, int fromwhere); // in stdio.h/cstdio

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

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

SEEK_SET:从距文件开头 offset 位移量为新的读写位置;

SEEK_CUR:以目前的读写位置往后增加 offset 个位移量;

SEEK_END:将读写位置指向文件尾后再增加 offset 个位移量。

当 fromwhere 为 SEEK_CUR 或 SEEK_END 时,参数 offset 允许负值的出现。对于以二进制方式打开的文件流,移动后的位置为 fromwhere + offset。

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

如果为重定向,请在 stream 处填写stdin 。


查看完整回答
反对 回复 2019-03-27
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

C++不支持直接定位到某一行。不过可以通过先定位到文件开始,然后把之前所有行均读出的方式,使文件定位到具体行。

具体代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

ifstream & seek_to_line(ifstream & in, int line)

//将打开的文件in,定位到line行。

{

    int i;

    char buf[1024];

    in.seekg(0, ios::beg);  //定位到文件开始。

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

    {

        in.getline(buf, sizeof(buf));//读取行。

    }

    return in;

}


 

 


查看完整回答
反对 回复 2019-03-27
  • 2 回答
  • 0 关注
  • 605 浏览

添加回答

举报

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