seekg如何使用?文件读取位置设置方法详解!

吉云

今天心血来潮,想搞搞文件操作,琢磨着怎么在文件里头“跳来跳去”地读取内容。这就不得不提C++里的一个函数:seekg。这名字,"seek" মানে 寻找,"g" মানে "get",合起来就是“去找然后拿”,挺形象的。

实践开始

我有点懵,不知道咋下手。于是我就上网查查,发现seekg这玩意儿主要是用来设置文件输入流的位置,说白就是让你可以指定从文件的哪个地方开始读数据。

seekg如何使用?文件读取位置设置方法详解!

找到的资料里提到它的两种用法:

  • seekg(streampos pos):这种是直接跳到文件里头的某个特定位置。
  • seekg(streamoff off, ios_base::seekdir way):这种就稍微复杂点,可以从文件开头、当前位置或者文件末尾,根据给定的偏移量来移动。

我寻思着,先试试第一种,直接跳到一个位置看看。

seekg如何使用?文件读取位置设置方法详解!

我创建一个文本文件,随便写点内容,然后用C++的ifstream打开这个文件,接着就用seekg,想跳到文件中间的某个位置,然后读取几个字符看看。代码大概长这样:


#include <iostream>

#include <fstream>

int main() {

seekg如何使用?文件读取位置设置方法详解!

std::ifstream file("我的文件.txt");

if (*_open()) {

*(5); // 随便跳到第5个字符的位置

char ch;

file >> ch; // 读取一个字符

std::cout << "读取到的字符是:" << ch << std::endl;

seekg如何使用?文件读取位置设置方法详解!

} else {

std::cout << "文件打开失败!" << std::endl;

return 0;

seekg如何使用?文件读取位置设置方法详解!

跑起来一试,还真读到!

更进一步

然后我又试试第二种用法,这回我想从文件末尾往前跳几个字符:

seekg如何使用?文件读取位置设置方法详解!

#include <iostream>

#include <fstream>

int main() {

std::ifstream file("我的文件.txt");

if (*_open()) {

seekg如何使用?文件读取位置设置方法详解!

*(-3, std::ios::end); // 从文件末尾往前数3个字符

char ch;

file >> ch;

std::cout << "读取到的字符是:" << ch << std::endl;

} else {

seekg如何使用?文件读取位置设置方法详解!

std::cout << "文件打开失败!" << std::endl;

return 0;

这回也成功!看来seekg用起来也不难嘛

一点小总结

seekg这个函数就是用来在文件里“定位”的,想从哪儿读就从哪儿读,挺方便的。不过要注意的是,这个函数是给输入文件流(ifstream)用的,输出文件流(ofstream)有它自己的“定位”函数,叫seekp,别搞混。

今天就先折腾到这儿,下次再试试seekp,看看它俩有啥不一样。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]