c++文件操作(3)-- 随机读取

发布时间:2024年01月24日

随机读取

文件指针?

在文件中有一个文件指针。?我们通过控制文件指针的位置,来实现随机读取文件中的数据。文件指针在哪我们就从文件的哪个位置开始读取数据。

?

seekg();? // 用于设置文件指针的位置。

通过传入两个参数来实现位置设置,第一个参数距离相应位置的偏移字节数?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?第二个参数:? ?相对位置??

相对位置: 一般使用三个。?

ios::beg表示相对于文件的开头位置
ios::cur相对于文件指针所在的当前位置
ios:end相对于文件的尾部位置

偏移字节数:?正数:向右偏移(文件结尾处),? ?负数:向左偏移(文件开始处)

注意:? 偏移字节数,尽量不要太大,超出文件的范围(尤其是用负数的时候)。?

int main(void) {

	ifstream io;
	string data;

	io.open("data.txt");

	if (!io.is_open()) return 1;

	// 设置文件指针的位置
	io.seekg(-10,ios::end); // 将文件指针设置为距离文件结尾10个字节的位置

	// 这时候我们读取文件中的数据,就是从距离文件末尾10字节的位置读取数据
	getline(io, data);

	cout << data << endl;

	system("pause");

	return 0;
}

读取结果:?

?

上面使用的负数,表示将文件指针设置到距离文件末尾10个字节的位置,这样我们读取文件就从这个位置开始读取数据。?(其它的设置也是同理)

?

tellg();? // 此函数返回文件指针当前所在的位置距离文件开头多少个字节。

这个函数常用的一个场景是:返回文件的大小。? (和seekg()结合)

?我们可以通过seekg()先将文件指针移动到文件末尾,然后再通过tellg()返回指针到文件开头的字节大小,这样就能会的文件的大小了。

int main(void) {

	ifstream io;

	io.open("data.txt");

	if (!io.is_open()) return 1;

	// 设置文件指针的位置
	io.seekg(0,ios::end); // 将文件指针移动到距离文件末尾0个字节的位置,也就是文件末尾

	// 返回文件指针到文件开头的字节数(获取文件的大小)
	int count = io.tellg();

	cout << count << endl;   // 20个字节

	system("pause");

	return 0;
}

?

上面两个都是在读取文件数据的时候进行文件指针的偏移。?

?

seekp()? // 用于控制输出流,也就是写文件时候,将文件指针移动到相应的位置,在这个位置写数据

使用一个例子说明: 我们在文件中写 “123456” 。 然后控制文件指针,在数据的中间输入ABC。

int main(void) {

	ofstream io;

	io.open("data.txt");

	if (!io.is_open()) return 1;

	io << "123456";

	// 设置文件指针的位置
	io.seekp(4,ios::beg); // 在输入文件的时候,将指针移动到距离文件开头4个字节的位置。
    
	// 然后在文件指针的位置写入数据
	io << "ABC";

	system("pause");

	return 0;
}

?

文章来源:https://blog.csdn.net/weixin_68026222/article/details/135829144
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。