本文详细介绍了C++中用于文件读写的ifstream类,以及与其相关的seekg和tellg函数。通过示例代码解释了这两个函数如何改变和获取文件指针的位置,从而实现文件内容的重复读取。示例1展示了如何使用seekg和tellg读取文件的特定部分,而示例2进一步探讨了偏移量和基地址的概念,说明了seekg的灵活性。 摘要由CSDN通过智能技术生成

ifstream是用于读写的C++库。
在C++中,读写是基于指针的。同样,seekg,tellg都和指针有关联。
tellg是告诉指针当前的位置。
seekg是修改指针的位置。
例程1.1:
seekg(地址)

#include <iostream>
#include <fstream>
using namespace std;
int main()
	ifstream in("in.txt");
	string line;
	streampos pos = in.tellg();//记录当前指针位置
	int i = 10;
	while (i--) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
	in.seekg(pos);//将指针指回第1行,可以重新读一次
    i=10;
    while (i--) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
	return 0;

以下是in.txt的内容。

shiyi

上文会输出两遍yi到shi,没有shiyi。
例程1.2

#include <iostream>
#include <fstream>
using namespace std;
int main()
	ifstream in("in.txt");
	string line;
	streampos pos = in.tellg();//记录当前指针位置
	int i = 10;
	while (i--) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
	in.seekg(pos);//将指针指回第1行,可以重新读一次
    i=10;
    while (i--) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
	in.seekg(7);//将指针指回第1行,可以重新读一次
    i=10;
    while (i>6) {//读到第11行之前
		getline(in, line);
        cout<<line<<endl;
		i=i-1;
	return 0;

这段代码为扩展代码。在上文的基础之上,第三次会额外输出
an,si,wu,liu。意味着seekg设置到了第8个字节(从0开始是7)的a处。

例程2:
seekg(偏移量,基地址)

#include <iostream>
#include <fstream>
using namespace std;
int main(){
    ifstream file;
    char c,c1,c2,c3,c5;
    file.open("in.txt");
    file.seekg(4);
    file>>c;//每次>>会输入一个字节。而且,到换行符的时候,指针会自动跳到下一个。
    file>>c3;
    file>>c5;
    file.seekg(3,ios::beg);
    file>>c1;
    file.seekg(-1,ios::end);
    file>>c2;
    cout<<c<<endl;
    cout<<c3<<endl;
    cout<<c5<<endl;
    cout<<c1<<endl;
    cout<<c2<<endl;

上文会输出r,s,a,e,i。

参考1
参考2

本文主要总结用C++的fstream、ifstream、ofstream方法读写文件,然后用seekg()、seekp()函数定位输入、输出文件指针位置,用tellg()、tellp()获取当前文件指针位置。 一、核心类和函数功能讲解 fstream:文件输入输出类。表示文件级输入输出流(字节流); ifstream:文件输入类。表示从文件内容输入,也就是读文件; ofstream:文件输...
//read whole file while(ifs.readline(str,strLen)){ std::cout &lt;&lt; line++ &lt;&lt; " : "&lt;&lt;str&lt;&lt;std::endl; ifs.seekg(0,std:...
声明:我个人特别讨厌:收费专栏、关注博主才可阅读等行为,推崇知识自由分享,推崇开源精神,呼吁你一起加入,大家共同成长进步! 在文件读写的时候,一般需要借助fstream来进行文件操作,常见的操作有seekg()和tellg(),但是这两个函数有一些需要注意的地方,如下: 主要参考: https://stackoverflow.com/questions/20506771/get-file-size-with-ifstreamseekg-and-tellg https://stackoverflow.c
tellg() 用于在输入流中获取位置 seekg()用于设置在输入流中的位置 其实本质上文件读写就是一个指针指向文件中某个位置后进行读写,所以简单来说tellg()和seekg()都是用于设置该指针的位置的。
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符: 1、插入器(   向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout 2、析取器(>>)
数据读取中实例一 void load_data(char* filename, float*& data, unsigned& num,unsigned& dim){// load data with sift10K pattern //以二进制形式打开文件 std::ifstream in(filename, std::ios::binary); //判断是否...