📜  具有Exmaples的C++中的ostream :: seekp(pos)方法

📅  最后修改于: 2021-05-30 07:04:15             🧑  作者: Mango

C++ostreamseekp(pos)方法用于将指针在输出序列中的位置设置为指定位置。此方法采用要设置的新位置,并返回该ostream实例,并将其位置设置为指定的新位置。

句法:

ostream& seekp(streampos pos);

参数:此方法将要设置的新位置作为参数。

返回值:该方法返回此ostream实例,并将其位置设置为指定的新位置。

排除:如果该操作设置了一个内部状态标志(eofbit除外),该标志已向成员异常注册,则该函数将引发成员类型failure的异常。

下面的示例演示了C++中seekp()方法的使用:

示例1:显示对binary文件的seekp()的使用

  • 从用户那里输入要显示的记录的序列号
  • 将n传递给函数,然后以读取模式打开文件
  • 通过seekp((n-1)* Sizeof(object))将写指针放在记录的开头
  • 将记录写入文件,然后将其关闭
  • 打开文件读取数据,然后关闭文件
// C++ program to show the use of
// ostream::seekp() method using binary file
  
#include 
using namespace std;
  
class student {
    int rno;
    char name[20];
  
public:
    void getdata()
    {
       name = "geek" rno = 11;
    }
  
    void putdata()
    {
        cout << rno << endl
             << name << endl;
    }
  
    // accepts the serial number
    // of record to be displayed
    void DisplayRecordAtPosition(int);
};
  
void student::DisplayRecordAtPosition(int n)
{
  
    ofstream ofs;
  
    // opening the file in writing mode
    ofs.open("he.dat", ios::out | ios::binary);
  
    // displays the size of the object
    // sizeof object is 22
    // char[20]+int = 1*20 + 2 = 22
    cout << "size of record: "
         << sizeof(*this) << endl;
  
    // Using seekp() method to change position
    ofs.seekp((n - 1) * sizeof(student));
  
    // Writing in the new position
  ofs.write(char*)this, sizeof(student));
  
  // Closing the output stream
  ofs.close();
  
  ifstream ifs;
  ifs.open("he.dat", ios::in | ios::binary);
  ifs.seekg((n - 1) * sizeof(student);
  ifs.read((char*)this, sizeof(student)) ";
  putdata();
  ifs.close();
}
  
// Driver code
int main()
{
    student s;
    int pos = 1;
  
    s.getdata();
  
    cout << "record no " << pos
         << " (position int file "
         << pos - 1 << ")\n";
    s.DisplayRecordAtPosition(pos);
  
    return 0;
}

输出:

size of record: 24
record no 1 (position int file 0)
rno: 1
name: geek
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”