std::basic_filebuf<CharT,Traits>:: seekoff
|
protected
:
virtual
pos_type seekoff
(
off_type off,
|
||
Reposiciona el puntero del archivo, si es posible, a la posición que corresponde exactamente a off caracteres desde el inicio, final o posición actual del archivo (dependiendo del valor de dir ).
Si el archivo asociado no está abierto ( is_open ( ) == false ), falla inmediatamente.
Si la codificación de caracteres multibyte es dependiente del estado (
codecvt::encoding()
devolvió
-
1
) o de longitud variable (
codecvt::encoding()
devolvió
0
) y el desplazamiento
off
no es
0
, falla inmediatamente: esta función no puede determinar el número de bytes que corresponden a
off
caracteres.
Si dir no es std::basic_ios::cur o el desplazamiento off no es 0 , y la operación más reciente realizada en este objeto filebuf fue de salida (es decir, o el búfer de escritura no está vacío, o la función llamada más recientemente fue overflow() ), entonces llama a std :: codecvt :: unshift para determinar la secuencia de unshift necesaria, y escribe esa secuencia en el archivo llamando a overflow() .
Luego convierte el argumento dir a un valor whence de tipo int de la siguiente manera:
| valor de dir | valor de whence |
| std :: basic_ios :: beg | SEEK_SET |
| std :: basic_ios :: end | SEEK_END |
| std :: basic_ios :: cur | SEEK_CUR |
Entonces, si la codificación de caracteres es de ancho fijo (
codecvt::encoding()
retorna algún número positivo
width
), mueve el puntero del archivo como si mediante
std::
fseek
(
file, width
*
off, whence
)
.
De lo contrario, mueve el puntero del archivo como si fuera mediante std:: fseek ( file, 0 , whence ) .
El argumento
openmode
, requerido por la firma de la función de la clase base, normalmente se ignora, porque
std::basic_filebuf
mantiene solo una posición de archivo.
Contenidos |
Parámetros
| off | - | posición relativa para establecer el indicador de posición | ||||||||
| dir | - |
define la posición base para aplicar el desplazamiento relativo. Puede ser una de las siguientes constantes:
|
||||||||
| 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
Un objeto recién construido de tipo pos_type que almacena la posición de archivo resultante, o pos_type ( off_type ( - 1 ) ) en caso de fallo.
Notas
seekoff()
es llamado por
std
::
basic_streambuf
::
pubseekoff
, que es llamado por
std
::
basic_istream
::
seekg
,
std
::
basic_ostream
::
seekp
,
std
::
basic_istream
::
tellg
, y
std
::
basic_ostream
::
tellp
.
Ejemplo
#include <fstream> #include <iostream> #include <locale> template<typename CharT> int get_encoding(const std::basic_istream<CharT>& stream) { using Facet = std::codecvt<CharT, char, std::mbstate_t>; return std::use_facet<Facet>(stream.getloc()).encoding(); } int main() { // preparar un archivo de 10 bytes con 4 caracteres ("zß水𝄋") en UTF-8 std::ofstream("text.txt") << "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; // abrir usando una codificación no convertidora std::ifstream f1("text.txt"); std::cout << "f1's locale's encoding() returns " << get_encoding(f1) << '\n' << "pubseekoff(3, beg) returns " << f1.rdbuf()->pubseekoff(3, std::ios_base::beg) << '\n' << "pubseekoff(0, end) returns " << f1.rdbuf()->pubseekoff(0, std::ios_base::end) << '\n'; // abrir usando UTF-8 std::wifstream f2("text.txt"); f2.imbue(std::locale("en_US.UTF-8")); std::cout << "f2's locale's encoding() returns " << get_encoding(f2) << '\n' << "pubseekoff(3, beg) returns " << f2.rdbuf()->pubseekoff(3, std::ios_base::beg) << '\n' << "pubseekoff(0, end) returns " << f2.rdbuf()->pubseekoff(0, std::ios_base::end) << '\n'; }
Salida:
f1's locale's encoding() returns 1 pubseekoff(3, beg) returns 3 pubseekoff(0, end) returns 10 f2's locale's encoding() returns 0 pubseekoff(3, beg) returns -1 pubseekoff(0, end) returns 10
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 55 | C++98 |
seekoff
retornaba una posición de flujo
inválida indefinida en caso de fallo |
pos_type
(
off_type
(
-
1
)
)
se retorna en caso de fallo |
Véase también
|
invoca
seekoff
(
)
(función miembro pública de
std::basic_streambuf<CharT,Traits>
)
|
|
|
[virtual]
|
reposiciona la posición del archivo, usando direccionamiento absoluto
(función miembro protegida virtual) |
|
mueve el indicador de posición del archivo a una ubicación específica en un archivo
(función) |