猿问

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

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


肥皂起泡泡
浏览 606回答 2
2回答

慕尼黑5688855

楼主可知道有个函数叫做 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 。

慕莱坞森

C++不支持直接定位到某一行。不过可以通过先定位到文件开始,然后把之前所有行均读出的方式,使文件定位到具体行。具体代码如下:123456789101112ifstream&nbsp;&&nbsp;seek_to_line(ifstream&nbsp;&&nbsp;in,&nbsp;int&nbsp;line)//将打开的文件in,定位到line行。{&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;buf[1024];&nbsp;&nbsp;&nbsp;&nbsp;in.seekg(0,&nbsp;ios::beg);&nbsp;&nbsp;//定位到文件开始。&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;line;&nbsp;i&nbsp;++)&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in.getline(buf,&nbsp;sizeof(buf));//读取行。&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;in;}&nbsp;&nbsp;
随时随地看视频慕课网APP
我要回答