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 
#include 
#include 
#include 

// 打印文件的倒数第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;
}

运行截图:
C++ 文件流的定位_第1张图片

=

=

=

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 
#include 
#include 

// 把“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;
}

文件截图:
C++ 文件流的定位_第2张图片

=

=

=

tellg

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

例:

int line = inFile.tellg();

代码实例:

#include 
#include 
#include 
#include 

// 定义一个函数,用来结算一个文件的长度并返回
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;
}

运行截图:
C++ 文件流的定位_第3张图片
C++ 文件流的定位_第4张图片

=

=

=

tellp

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

例:

int line = outFile.tellg();

代码实例:

#include 
#include 
#include 

// 定义一个函数,用来结算一个文件的长度并返回
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;
}

运行截图:

C++ 文件流的定位_第5张图片

C++ 文件流的定位_第6张图片

你可能感兴趣的:(c++)