假定二进制文件“ student.data”已经加载到计算机内存中,并具有100个学生的记录,则任务是读取第K条记录并执行一些操作。
seekg()是iostream库(标准库的一部分)中的一个函数,该函数使您可以查找文件中的任意位置。它在文件处理中用于设置要从给定文件的输入流中提取的下一个字符的位置。例如 :
Input: "Hello World"
Output: World
tellg()函数与输入流一起使用,并返回指针在流中的当前“获取”位置。它没有参数,并返回成员类型pos_type的值,该值是表示get流指针的当前位置的整数数据类型。
方法:
假设二进制文件“ student.dat”中有100条记录,并且K = 7
- 步骤1:语句fs.seekg(7 * sizeof(student))将读取指针放置到文件的168(-> 7 * 22)索引(基于基于’0’的索引)
- 第2步:语句fs.read((char *)this; sizeof(student));读取记录,现在读取指针位于第8条记录的开头。因此,语句fs.tellg()/ sizeof(s)的结果为值8 ,“ fs.tellg()/ sizeof(s)+1”的输出为8 +1 = 9
- 步骤3:语句fs.seekg(0,ios :: end)将指针放在文件末尾,因此fs.seekg(0,ios :: end)/ sizeof(s)得到100
下面是上述方法的实现:
CPP
// C++ program to Read a record from a File
// using seekg() and tellg()
#include
using namespace std;
class student {
int id;
char Name[20];
public:
void display(int K);
};
void student::display(int K)
{
fstream fs;
fs.open("student.dat", ios::in | ios::binary);
// using seekg(pos) method
// to place pointer at 7th record
fs.seekg(K * sizeof(student));
// reading Kth record
fs.read((char*)this, sizeof(student));
// using tellg() to display current position
cout << "Current Position: "
<< "student no: "
<< fs.tellg() / sizeof(student) + 1;
// using seekg()place pointer at end of file
fs.seekg(0, ios::end);
cout << " of "
<< fs.tellg() / sizeof(student)
<< endl;
fs.close();
}
// Driver code
int main()
{
// Record number of the student to be read
int K = 7;
student s;
s.display(K);
return 0;
}
输出:
Current Position: student no: 9 of 100
想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。