Translate

viernes, 6 de septiembre de 2024

seekg, seekp, tellg y tellp de C++




No soy mucho de utilizar archivos pero cuando tengo que hacer algo tengo que investigar las funciones seek* y tell*. Este post tiene como objetivo que me aprenda esto, por favooor!!


seekg` y `tellg:  Estas funciones se utilizan para manejar la posición del cursor de lectura en un flujo de entrada (`istream`).


seekg (seek get):

Cambia la posición del cursor de lectura en un flujo de entrada.

Su sintaxis es :  stream.seekg(position); o stream.seekg(offset, direction);

Y los Parámetros:

  1.     position: Especifica la nueva posición absoluta.
  2.     offset: Desplazamiento en bytes desde el punto indicado por `direction`.
  3.     direction: Puede ser `std::ios::beg` (inicio del archivo), `std::ios::cur` (posición actual), o `std::ios::end` (final del archivo).

Veamos un ejemplo: 

std::ifstream file("example.txt");

file.seekg(10, std::ios::beg); // Mueve el cursor de lectura al décimo byte desde el inicio del archivo


tellg (tell get):

Retorna la posición actual del cursor de lectura en un flujo de entrada.

Su sintaxis es :stream.tellg();

Devuelve la posición actual como un valor de tipo std::streampos.

Veamos un ejemplo: 

std::ifstream file("example.txt");

std::streampos pos = file.tellg(); // Obtiene la posición actual del cursor de lectura


seekp y tellp: Estas funciones se utilizan para manejar la posición del cursor de escritura en un flujo de salida (`ostream`).


seekp (seek put): Cambia la posición del cursor de escritura en un flujo de salida.

Su sintaxis es stream.seekp(position); o stream.seekp(offset, direction);

Los parámetros son:

  1.    position: Especifica la nueva posición absoluta.
  2.    offset: Desplazamiento en bytes desde el punto indicado por `direction`.
  3.    direction: Puede ser `std::ios::beg` (inicio del archivo), `std::ios::cur` (posición actual), o `std::ios::end` (final del archivo).

Veamos un ejemplo: 


std::ofstream file("example.txt");

file.seekp(5, std::ios::beg); // Mueve el cursor de escritura al quinto byte desde el inicio del archivo


tellp (tell put): Retorna la posición actual del cursor de escritura en un flujo de salida.

Su sintaxis: stream.tellp();

Devuelve la posición actual como un valor de tipo `std::streampos`.


Un ejemplo: 

std::ofstream file("example.txt");

std::streampos pos = file.tellp(); // Obtiene la posición actual del cursor de escritura


Ambos pares de funciones permiten manipular y consultar la posición de los cursores dentro de los archivos o flujos, pero seekg/tellg están destinados a la lectura, mientras que seekp/tellp están destinados a la escritura. Vamos a ver si me lo aprendo.