📜  使用seekg()和tellg()从C ++中的文件读取记录

📅  最后修改于: 2021-05-31 21:08:14             🧑  作者: Mango

假定二进制文件“ 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等的更多准备工作,请参阅“完整面试准备课程”