seekg()用于输入流,移动读指针;seekp()用于输出流,移动写指针。前者控制读取位置,后者控制写入位置,分别适用于ifstream和ofstream或fstream的读写操作。
在C++文件流中,seekg() 和 seekp() 都用于移动文件内部的读写位置指针,但它们操作的对象不同,用途也不同。
seekg():用于输入流(读取位置)
seekg() 的全称是 “seek get”,用于设置输入文件流中下一个读取字符的位置。它只影响从文件中读数据的操作。
常见用法:
- 将读指针移动到文件开头、末尾或某个指定偏移量处
- 适用于 ifstream 和 fstream(以输入模式打开时)
示例:
ifstream file("data.txt"); file.seekg(10); // 从文件开头跳过10个字节再开始读 char c; file >> c; // 读取第11个字节的内容
seekp():用于输出流(写入位置)
seekp() 的全称是 “seek put”,用于设置输出文件流中下一个写入字符的位置。它只影响向文件写数据的操作。
立即学习“C++免费学习笔记(深入)”;
常见用法:
- 在文件中间修改部分内容而不覆盖整个文件
- 追加数据前跳转到指定位置
- 适用于 ofstream 和 fstream(以输出模式打开时)
示例:
fstream file("data.txt", ios::in | ios::out); file.seekp(5); // 移动写指针到第6个字节位置 file << "XYZ"; // 在该位置写入数据
两者的关键区别
- seekg() 控制读位置(get pointer),用于输入操作
- seekp() 控制写位置(put pointer),用于输出操作
- 对只读流调用 seekp() 无效,对只写流调用 seekg() 无效
- 在 fstream 这样的双向流中,两个指针可以独立移动
基本上就这些。理解它们的关键是记住:g 表示 get(读),p 表示 put(写)。根据你是要读还是写,选择对应的函数。
评论(已关闭)
评论已关闭