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

随机读取

文件指针 

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

 

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;
}

读取结果: 

c++文件操作(3)-- 随机读取_第1张图片 

上面使用的负数,表示将文件指针设置到距离文件末尾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;
}

 

你可能感兴趣的:(c++,开发语言)