ostream::seekp(pos) método en C++ con ejemplos

El método seekp(pos) de ostream en C++ se usa para establecer la posición del puntero en la secuencia de salida con la posición especificada. Este método toma la nueva posición que se establecerá y devuelve esta instancia ostream con la posición establecida en la nueva posición especificada.
Sintaxis: 
 

ostream& seekp(streampos pos);

Parámetro: Este método toma como parámetro la nueva posición a configurar.
Valor de retorno: este método devuelve esta instancia de ostream con la posición establecida en la nueva posición especificada.
Excepciones: si la operación establece un indicador de estado interno (excepto eofbit) que se registró con excepciones de miembros, la función genera una excepción de falla de tipo de miembro .
Los siguientes ejemplos demuestran el uso del método seekp() en C++:
Ejemplo 1: para mostrar el uso de seekp() con un archivo binario 
 

  • Tome la entrada del usuario sobre el número de serie del registro que se mostrará
  • Pase n a la función y luego abra el archivo en modo lectura
  • Coloque el puntero de escritura al comienzo del registro por seekp((n-1)*Sizeof (objeto))
  • Escriba el registro en el archivo y luego ciérrelo.
  • Abra el archivo, lea los datos y luego cierre el archivo.

CPP

// 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 << ")\n";
    s.DisplayRecordAtPosition(pos);
 
    return 0;
}

Producción: 
 

size of record: 24
record no 1 (position int file 0)
rno: 1
name: geek

Publicación traducida automáticamente

Artículo escrito por vinaychopra92vc y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *