tellp用于获取输出流写指针位置,tellg用于获取输入流读指针位置,二者分别支持文件写入和读取时的随机访问与位置记录。

在C++文件读写操作中,tellp 和 tellg 是两个用于获取当前文件位置指针的函数,分别对应输出(写)和输入(读)的位置。它们常用于记录当前位置、实现随机访问或调试文件操作流程。
tellp:获取输出位置(写指针)
当使用输出流(如 ofstream 或 fstream 以写模式打开)时,tellp 返回下一个要写入字符的位置。
常见用法:
- 在写入关键数据前记录位置,便于后续回退或修改
- 配合 seekp 实现写指针跳转
ofstream file("data.txt");
streampos pos = file.tellp(); // 获取当前写位置
if (pos == -1) {
cout << "无法获取写位置" << endl;
}
file << "Hello";
pos = file.tellp(); // 此时位置应为5
tellg:获取输入位置(读指针)
对于输入流(如 ifstream 或 fstream 以读模式打开),tellg 返回下一个要读取字符的位置。
立即学习“C++免费学习笔记(深入)”;
适用场景:
- 读取过程中记录已处理字节数
- 判断是否到达文件末尾(结合 eof())
- 与 seekg 配合实现文件内容重读或跳转
ifstream file("data.txt");
streampos pos = file.tellg(); // 初始为0
char ch;
file >> ch;
pos = file.tellg(); // 位置向前移动
注意事项
使用这两个函数时需注意以下几点:
- 只有在文件流处于有效状态时调用才有意义,否则可能返回 -1
- 对同一个 fstream 对象,若同时进行读写操作,应确保调用正确的函数(读用 tellg,写用 tellp)
- 返回类型为 streampos,是无符号类型,比较时避免与 -1 直接对比(可用 == streampos(-1))
基本上就这些。掌握 tellp 和 tellg 能更好控制文件读写位置,尤其在处理二进制文件或需要回写头信息时非常实用。










