std::basic_filebuf<CharT,Traits>:: seekpos
|
protected
:
virtual
pos_type seekpos
(
pos_type sp,
|
||
Repositionne le pointeur de fichier, si possible, à la position indiquée par sp . Si le fichier associé n'est pas ouvert ( is_open ( ) == false ), échoue immédiatement.
Le repositionnement s'effectue comme suit :
Si
sp
n'a pas été obtenu en appelant
seekoff()
ou
seekpos()
sur le même fichier, le comportement est indéfini.
Table des matières |
Paramètres
| sp | - |
position de fichier obtenue par
seekoff()
ou
seekpos()
appelée précédemment sur le même fichier
|
||||||
| which | - |
définit quelle(s) séquence(s) d'entrée et/ou de sortie affecter. Il peut s'agir d'une ou d'une combinaison des constantes suivantes :
|
Valeur de retour
sp en cas de succès ou pos_type ( off_type ( - 1 ) ) en cas d'échec.
Notes
seekpos()
est appelée par
std::basic_streambuf::pubseekpos()
, qui est appelée par les versions à un seul argument de
std::basic_istream::seekg()
et
std::basic_ostream::seekp()
.
De nombreuses implémentations ne mettent pas à jour la zone get dans
seekpos()
, déléguant à
underflow()
qui est appelé par le prochain
sgetc()
.
Exemple
Sur certaines implémentations, la zone de lecture est vidée par
seekpos()
et le second appel à
underflow()
est nécessaire pour observer les effets.
#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); }
Sortie possible :
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.
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 55 | C++98 |
seekpos
renvoyait une position de flux
invalide non définie en cas d'échec |
pos_type
(
off_type
(
-
1
)
)
est renvoyé en cas d'échec |
| LWG 171 | C++98 | la séquence des opérations de repositionnement n'était pas claire | clarifiée |
Voir aussi
|
appelle
seekpos
(
)
(fonction membre publique de
std::basic_streambuf<CharT,Traits>
)
|
|
|
[virtual]
|
repositionne la position dans le fichier, en utilisant l'adressage relatif
(fonction membre protégée virtuelle) |
|
déplace l'indicateur de position du fichier vers un emplacement spécifique
(fonction) |