std::basic_filebuf<CharT,Traits>:: seekoff
|
protected
:
virtual
pos_type seekoff
(
off_type off,
|
||
Repositionne le pointeur de fichier, si possible, à la position qui correspond exactement à off caractères depuis le début, la fin ou la position actuelle du fichier (en fonction de la valeur de dir ).
Si le fichier associé n'est pas ouvert ( is_open ( ) == false ), échoue immédiatement.
Si l'encodage des caractères multioctets dépend de l'état (
codecvt::encoding()
a retourné
-
1
) ou à longueur variable (
codecvt::encoding()
a retourné
0
) et que l'offset
off
n'est pas
0
, échoue immédiatement : cette fonction ne peut pas déterminer le nombre d'octets correspondant à
off
caractères.
Si dir n'est pas std::basic_ios::cur ou si le décalage off n'est pas 0 , et que l'opération la plus récente effectuée sur cet objet filebuf était une sortie (c'est-à-dire que le tampon de sortie n'est pas vide, ou que la fonction appelée le plus récemment était overflow() ), alors appelle std :: codecvt :: unshift pour déterminer la séquence de décalage nécessaire, et écrit cette séquence dans le fichier en appelant overflow() .
Convertit ensuite l'argument dir en une valeur whence de type int comme suit :
| valeur de dir | valeur de whence |
| std :: basic_ios :: beg | SEEK_SET |
| std :: basic_ios :: end | SEEK_END |
| std :: basic_ios :: cur | SEEK_CUR |
Ensuite, si l'encodage des caractères est à largeur fixe (
codecvt::encoding()
retourne un nombre positif
width
), déplace le pointeur de fichier comme par
std::
fseek
(
file, width
*
off, whence
)
.
Sinon, déplace le pointeur de fichier comme si par std:: fseek ( file, 0 , whence ) .
L'argument
openmode
, requis par la signature de la fonction de la classe de base, est généralement ignoré, car
std::basic_filebuf
ne maintient qu'une seule position de fichier.
Table des matières |
Paramètres
| off | - | position relative à laquelle définir l'indicateur de position | ||||||||
| dir | - |
définit la position de base à laquelle appliquer le décalage relatif. Il peut s'agir d'une des constantes suivantes :
|
||||||||
| which | - |
définit quelles séquences d'entrée et/ou de sortie affecter. Il peut s'agir d'une ou d'une combinaison des constantes suivantes :
|
Valeur de retour
Un objet nouvellement construit de type pos_type qui stocke la position de fichier résultante, ou pos_type ( off_type ( - 1 ) ) en cas d'échec.
Notes
seekoff()
est appelée par
std
::
basic_streambuf
::
pubseekoff
, qui est appelée par
std
::
basic_istream
::
seekg
,
std
::
basic_ostream
::
seekp
,
std
::
basic_istream
::
tellg
, et
std
::
basic_ostream
::
tellp
.
Exemple
#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() { // prépare un fichier de 10 octets contenant 4 caractères ("zß水𝄋") en UTF-8 std::ofstream("text.txt") << "\x7a\xc3\x9f\xe6\xb0\xb4\xf0\x9d\x84\x8b"; // ouvre en utilisant un encodage non-convertissant std::ifstream f1("text.txt"); std::cout << "L'encoding() du locale de f1 retourne " << get_encoding(f1) << '\n' << "pubseekoff(3, beg) retourne " << f1.rdbuf()->pubseekoff(3, std::ios_base::beg) << '\n' << "pubseekoff(0, end) retourne " << f1.rdbuf()->pubseekoff(0, std::ios_base::end) << '\n'; // ouvre en utilisant UTF-8 std::wifstream f2("text.txt"); f2.imbue(std::locale("en_US.UTF-8")); std::cout << "L'encoding() du locale de f2 retourne " << get_encoding(f2) << '\n' << "pubseekoff(3, beg) retourne " << f2.rdbuf()->pubseekoff(3, std::ios_base::beg) << '\n' << "pubseekoff(0, end) retourne " << f2.rdbuf()->pubseekoff(0, std::ios_base::end) << '\n'; }
Sortie :
L'encoding() du locale de f1 retourne 1 pubseekoff(3, beg) retourne 3 pubseekoff(0, end) retourne 10 L'encoding() du locale de f2 retourne 0 pubseekoff(3, beg) retourne -1 pubseekoff(0, end) retourne 10
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 | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 55 | C++98 |
seekoff
renvoyait une position de flux
invalide non définie en cas d'échec |
pos_type
(
off_type
(
-
1
)
)
est renvoyé en cas d'échec |
Voir aussi
|
invoque
seekoff
(
)
(fonction membre publique de
std::basic_streambuf<CharT,Traits>
)
|
|
|
[virtual]
|
repositionne la position dans le fichier, en utilisant l'adressage absolu
(fonction membre protégée virtuelle) |
|
déplace l'indicateur de position du fichier vers un emplacement spécifique
(fonction) |