2 回答
TA贡献1848条经验 获得超2个赞
楼主可知道有个函数叫做 fseek ?
1 | int 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 。
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; } |
- 2 回答
- 0 关注
- 605 浏览
添加回答
举报