📅  最后修改于: 2023-12-03 14:49:51.483000             🧑  作者: Mango
在C++中,我们可以使用seekg()
和tellg()
函数来从文件中读取记录。这两个函数提供了对文件流的定位和查询功能,对于需要随机访问文件中的特定记录的情况非常有用。
seekg()
函数用于在输入流中定位到指定的位置。它的语法如下:
streampos seekg(streampos pos);
streampos seekg(streamoff off, ios_base::seekdir dir);
pos
是一个streampos
类型的参数,表示要在输入流中定位到的绝对位置。off
是一个streamoff
类型的参数,表示要移动的偏移量。正数表示向前移动,负数表示向后移动。dir
用于指定相对于off
的位置,可选值为ios_base::beg
(从文件开头开始计算)、ios_base::cur
(从当前位置开始计算)和ios_base::end
(从文件结尾开始计算)。以下示例展示了如何使用seekg()
函数从文件中定位到指定位置:
#include <iostream>
#include <fstream>
int main() {
std::ifstream file("data.txt");
if (!file.is_open()) {
std::cout << "Failed to open the file." << std::endl;
return 1;
}
// 定位到文件中的第10个字节
file.seekg(9, std::ios_base::beg);
// 读取定位位置后的数据
char data[100];
file.read(data, 100);
std::cout << data << std::endl;
file.close();
return 0;
}
在上面的示例中,我们打开了一个名为"data.txt"的文件,并使用seekg()
函数将读取位置定位到第10个字节。然后,我们从定位位置开始读取100个字节的数据,并将其输出到控制台。
tellg()
函数用于查询当前读取位置在输入流中的绝对位置。它返回一个streampos
类型的值,表示当前位置。
以下示例展示了如何使用tellg()
函数查询当前读取位置的绝对位置:
#include <iostream>
#include <fstream>
int main() {
std::ifstream file("data.txt");
if (!file.is_open()) {
std::cout << "Failed to open the file." << std::endl;
return 1;
}
// 查询当前读取位置的绝对位置
std::streampos position = file.tellg();
std::cout << "Current position: " << position << std::endl;
file.close();
return 0;
}
在上面的示例中,我们打开了一个名为"data.txt"的文件,并使用tellg()
函数查询当前读取位置的绝对位置。然后,我们将该位置输出到控制台。
seekg()
和tellg()
函数之前,打开了输入文件流(如ifstream
)。seekg()
和tellg()
函数可能会导致性能下降,因为它们需要在文件中进行随机访问。这就是使用seekg()
和tellg()
函数从C++中的文件读取记录的介绍。通过这些函数,你可以方便地定位和查询文件流中的任意位置。在处理文件时,它们是非常有用的工具。
注意: 以上代码仅为示例,实际使用时可能需要进行错误处理和适配特定需求。