seekg/seekp与tellg/tellp文件指针定位详解
请解释 C++ 文件流中 seekg、seekp、tellg、tellp 的区别与用法,说明 seek 的三种定位方向(beg/cur/end),并给出文件大小计算和断点续传的代码示例。
回答
编译有声
文件流有独立的读指针(get pointer)和写指针(put pointer):
tellg():返回读指针当前位置(pos_type)。tellp():返回写指针当前位置。seekg(offset, dir):将读指针移动到dir偏移offset处。seekp(offset, dir):将写指针移动到指定位置。
dir 可选值:ios::beg(文件头)、ios::cur(当前位置)、ios::end(文件尾)。
计算文件大小:
ifstream fin("f.txt", ios::binary);
fin.seekg(0, ios::end);
auto size = fin.tellg();
fin.seekg(0, ios::beg);
断点续传示例:使用 tellg 记录上次读取位置,下次打开后 seekg(pos) 继续读取。注意文本模式下 tellg 返回值可能与实际字节数不符,建议二进制模式。