Establecer posición con seekg() en el manejo de archivos C++

seekg() es una función en la biblioteca iostream que le permite buscar una posición arbitraria en un archivo. Se incluye en el archivo de encabezado <fstream> y se define para la clase istream . Se utiliza en el manejo de archivos para establecer la posición del siguiente carácter que se extraerá del flujo de entrada de un archivo determinado. 

Sintaxis: Hay dos sintaxis para seekg() en el manejo de archivos, 

istream&seekg(streampos position);

o

istream&seekg(streamoff offset, ios_base::seekdir dir);

Parámetros:

  • posición: es la nueva posición en el búfer de flujo.
  • offset: es un valor entero de tipo streamoff que representa el desplazamiento en el búfer de la secuencia. Es relativo al parámetro dir.
  • dir: Es la dirección de búsqueda. Es un objeto de tipo ios_base::seekdir que puede tomar cualquiera de los siguientes valores constantes.

Hay 3 direcciones que usamos para el valor de compensación:

  • ios_base::beg: desplazamiento desde el comienzo del búfer de la transmisión.
  • ios_base::cur: desplazamiento desde la posición actual en el búfer de la transmisión.
  • ios_base::end: desplazamiento desde el final del búfer de la transmisión.

Entendamos a través de un ejemplo,

Si tomamos la siguiente entrada,

Input : "Hello World"

y buscar la 6ª posición desde el principio del archivo

 myFile.seekg(6, ios::beg);

y lea los siguientes 5 caracteres del archivo en un búfer, 

char A[6];
myFile.read(A, 5);

entonces la salida será,

Output : World

Algoritmo para el ejemplo anterior:

  • Abra un nuevo archivo para las operaciones de entrada/salida, descartando cualquier archivo actual (suponga una longitud de cero al abrir).
  • Agregue los caracteres «Hello World» al archivo.
  • Busque hasta 6 caracteres desde el principio del archivo.
  • Lea los siguientes 5 caracteres del archivo en el búfer.
  • Termina el búfer con un carácter de terminación nulo.
  • Muestra el contenido leído del archivo y ciérralo.

Programa:

CPP

// CPP Program to demonstrate the
// seekg function in file
// handling
#include <fstream>
#include <iostream>
using namespace std;
 
// Driver Code
int main(int argc, char** argv)
{
    // Open a new file for input/output operations
    fstream myFile("test.txt",
                   ios::in | ios::out | ios::trunc);
 
    // Add the characters "Hello World" to the file
    myFile << "Hello World";
 
    // Seek to 6 characters from the beginning of the file
    myFile.seekg(6, ios::beg);
 
    // Read the next 5 characters from the file into a
    // buffer
    char A[6];
    myFile.read(A, 5);
 
    // End the buffer with a null terminating character
    A[5] = 0;
 
    // Output the contents read from the file and close it
    cout << A << endl;
 
    myFile.close();
}

Producción:

World

Nota: si previamente obtuvimos un final de archivo en la transmisión, seekg no lo restablecerá pero devolverá un error en muchas implementaciones. Utilice el método clear() para borrar primero el bit final del archivo. Este es un error relativamente común y si seekg() no funciona como se esperaba.

Este artículo es una contribución de Shivani Baghel . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *