ostream :: seekp (pos) в C ++ с Exmaples

Опубликовано: 29 Декабря, 2021

Метод seekp (pos) класса ostream в C ++ используется для установки позиции указателя в выходной последовательности с указанной позицией. Этот метод принимает новую позицию, которую нужно установить, и возвращает этот экземпляр ostream с позицией, установленной в указанную новую позицию.

Синтаксис:

ostream & seekp (streampos pos);

Параметр: этот метод принимает новую позицию, которая будет установлена в качестве параметра.

Возвращаемое значение: этот метод возвращает этот экземпляр ostream с позицией, установленной на указанную новую позицию.

Исключения: если операция устанавливает флаг внутреннего состояния (кроме eofbit), который был зарегистрирован с исключениями членов, функция генерирует исключение сбоя типа члена.

Примеры ниже демонстрируют использование метода seekp () в C ++:

Пример 1: показать использование seekp () с двоичным файлом

  • Получите информацию от пользователя о серийном номере отображаемой записи.
  • Передайте n функции, затем откройте файл в режиме чтения
  • Поместите указатель записи в начало записи с помощью seekp ((n-1) * Sizeof (object))
  • Запишите запись в файл, а затем закройте его
  • Откройте файл, прочтите данные, а затем закройте файл
// C++ program to show the use of
// ostream::seekp() method using binary file
#include <bits/stdc++.h>
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 << ") " ;
s.DisplayRecordAtPosition(pos);
return 0;
}

Выход:

размер записи: 24
запись № 1 (позиция в файле 0)
rno: 1
имя: компьютерщик
Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++