C++ 文件流的定位

seekg

设置该输入流的位置(只能ifstream和fstream定义的文件类型使用)

seekg(参数一,参数二);
参数一:偏移量
参数二:相对位置
beg 相对于开始位置
cur 相对于当前位置
end 相对于结束位置

例:
1.beg:定位到文件中的第10个字节处

inFile.seekg(10, inFile.beg);

2.cur:定位到从文件的当前位置后10个字节处

inFile.seekg(10, inFile.cur);

3.end:定位到文件的倒数第10个字节处

inFile.seekg(-10, inFile.end);

代码实例:
打印文件的倒数第100个字符

#include <iostream>
#include <Windows.h>
#include <fstream>
#include <string>

// 打印文件的倒数第100个字符
using namespace std;

int main(void) {
	ifstream inFile;	// 定义输入流的文件
	string line;

	inFile.open("seekg.cpp");	// 打开文件
	if (!inFile.is_open()) {	// 判断文件是否打开失败
		cout << "文件打开失败!" << endl;
		system("pause");
		return -1;
	}

	// 将文件定位到倒数第100个字符
	inFile.seekg(-100, inFile.end);

	while (!inFile.eof()) {
		getline(inFile, line);	// 获取文件的一行数据

		cout << line << endl;
	}

	inFile.close();		// 关闭文件
	system("pause");
	return 0;
}

运行截图:
在这里插入图片描述

=

=

=

seekp

设置该输出流的位置(只能ofstream和fstream定义的文件类型使用)

用法和seekg一模一样

seekp(参数一,参数二);
参数一:偏移量
参数二:相对位置
beg 相对于开始位置
cur 相对于当前位置
end 相对于结束位置

例:
1.beg:定位到文件中的第10个字节处

outFile.seekg(10, inFile.beg);

2.cur:定位到从文件的当前位置后10个字节处

outFile.seekg(10, inFile.cur);

3.end:定位到文件的倒数第10个字节处

outFile.seekg(-10, inFile.end);

代码实例:
把“I LOVE C++!”写入文件中,再从它第7个字节处继续写入“JAVA”

#include <iostream>
#include <Windows.h>
#include <fstream>

// 把“I LOVE C++!”写入文件中,再定位到第7个字节处写入“JAVA"
using namespace std;

int main(void) {
	ofstream outFile;

	outFile.open("text.txt");
	if (!outFile.is_open()) {
		cout << "文件打开失败!" << endl;
		system("pause");
		return -1;
	}

	outFile << "I LOVE C++";	// 把字符串写入文件中

	outFile.seekp(7, outFile.beg);	// 把位置定位到文件的第五个字节处

	outFile << "JAVA";

	outFile.close();
	system("pause");
	return 0;
}

文件截图:
在这里插入图片描述

=

=

=

tellg

返回该输入流的当前位置(距离文件的起始位置的偏移量)
只能ifstream和fstream定义的文件类型使用

例:

int line = inFile.tellg();

代码实例:

#include <iostream>
#include <Windows.h>
#include <string>
#include <fstream>

// 定义一个函数,用来结算一个文件的长度并返回
using namespace std;

// 输入流获取文件的长度
int getSize(const char *FILE) {
	ifstream inFile;

	inFile.open(FILE);
	if (!inFile.is_open()) {
		cout << "文件打开失败!" << endl;
		system("pause");
		return -1;
	}

	// 将文件定位到最后一个字符
	inFile.seekg(0, inFile.end);

	// 获取该文件的大小
	int ret = inFile.tellg();

	inFile.close();

	return ret;
}

int main(void) {
	// 读文件的长度
	cout << getSize("tellg.cpp") << endl;

	system("pause");
	return 0;
}

运行截图:
在这里插入图片描述
在这里插入图片描述

=

=

=

tellp

返回该输出流的当前位置(距离文件的起始位置的偏移量)
只能ofstream和fstream定义的文件类型使用

例:

int line = outFile.tellg();

代码实例:

#include <iostream>
#include <Windows.h>
#include <fstream>

// 定义一个函数,用来结算一个文件的长度并返回
using namespace std;

// 输出流获取文件的长度
int setSize(const char *FILE) {
	ofstream outFile;

	outFile.open(FILE);
	if (!outFile.is_open()) {
		cout << "文件打开失败!" << endl;
		system("pause");
		return -1;
	}

	outFile << "我中意你!";

	int ret = outFile.tellp();		// 计算文件长度

	outFile.close();
	return ret;
}

int main(void) {
	// 写文件的长度
	cout << setSize("text.txt") << endl;

	system("pause");
	return 0;
}

运行截图:

在这里插入图片描述

在这里插入图片描述

发布了39 篇原创文章 · 获赞 17 · 访问量 3843

猜你喜欢

转载自blog.csdn.net/cpp_learner/article/details/104137459