std::basic_filebuf<CharT,Traits>:: seekpos
|
protected
:
virtual
pos_type seekpos
(
pos_type sp,
|
||
Reposiciona el puntero del archivo, si es posible, a la posición indicada por sp . Si el archivo asociado no está abierto ( is_open ( ) == false ), falla inmediatamente.
Reposition se realiza de la siguiente manera:
Si
sp
no fue obtenido llamando a
seekoff()
o
seekpos()
en el mismo archivo, el comportamiento es indefinido.
Contenidos |
Parámetros
| sp | - |
posición de archivo obtenida por
seekoff()
o
seekpos()
llamado anteriormente en el mismo archivo
|
||||||
| which | - |
define cuál de las secuencias de entrada y/o salida afectar. Puede ser una o una combinación de las siguientes constantes:
|
Valor de retorno
sp en caso de éxito o pos_type ( off_type ( - 1 ) ) en caso de fallo.
Notas
seekpos()
es llamado por
std::basic_streambuf::pubseekpos()
, que es llamado por las versiones de un solo argumento de
std::basic_istream::seekg()
y
std::basic_ostream::seekp()
.
Muchas implementaciones no actualizan el área de obtención en
seekpos()
, delegando a
underflow()
que es llamado por el siguiente
sgetc()
.
Ejemplo
En algunas implementaciones, el área de obtención se vacía mediante
seekpos()
y es necesario un segundo
underflow()
para observar los efectos.
#include <fstream> #include <iostream> struct mybuf : std::filebuf { pos_type seekpos(pos_type sp, std::ios_base::openmode which) { std::cout << "Before seekpos(" << sp << "), size of the get area is " << egptr() - eback() << " with " << egptr() - gptr() << " read positions available.\n"; pos_type rc = std::filebuf::seekpos(sp, which); std::cout << "seekpos() returns " << rc << ".\nAfter the call, " << "size of the get area is " << egptr() - eback() << " with " << egptr() - gptr() << " read positions available.\n"; // uncomment if get area is emptied by seekpos() // std::filebuf::underflow(); // std::cout << "after forced underflow(), size of the get area is " // << egptr() - eback() << " with " // << egptr() - gptr() << " read positions available.\n"; return rc; } }; int main() { mybuf buf; buf.open("test.txt", std::ios_base::in); std::istream stream(&buf); stream.get(); // read one char to force underflow() stream.seekg(2); }
Salida posible:
Before seekpos(2), size of the get area is 110 with 109 read positions available. seekpos() returns 2. After the call, size of the get area is 110 with 108 read positions available.
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 55 | C++98 |
seekpos
retornaba una posición de flujo
inválida indefinida en caso de fallo |
pos_type
(
off_type
(
-
1
)
)
se retorna en caso de fallo |
| LWG 171 | C++98 | la secuencia de operaciones de reposicionamiento no era clara | se aclaró |
Véase también
|
invoca
seekpos
(
)
(función miembro pública de
std::basic_streambuf<CharT,Traits>
)
|
|
|
[virtual]
|
reposiciona la posición del archivo, usando direccionamiento relativo
(función miembro protegida virtual) |
|
mueve el indicador de posición del archivo a una ubicación específica en un archivo
(función) |