std::basic_filebuf<CharT,Traits>:: seekpos
|
protected
:
virtual
pos_type seekpos
(
pos_type sp,
|
||
Positioniert den Dateizeiger, falls möglich, an die durch sp angegebene Position. Wenn die zugehörige Datei nicht geöffnet ist ( is_open ( ) == false ), schlägt der Vorgang sofort fehl.
Reposition verhält sich wie folgt:
Wenn
sp
nicht durch Aufruf von
seekoff()
oder
seekpos()
auf derselben Datei erhalten wurde, ist das Verhalten undefiniert.
Inhaltsverzeichnis |
Parameter
| sp | - |
Dateiposition, erhalten durch
seekoff()
oder
seekpos()
, die zuvor auf derselben Datei aufgerufen wurden
|
||||||
| which | - |
definiert, welche der Eingabe- und/oder Ausgabesequenzen betroffen sind. Es kann eine oder eine Kombination der folgenden Konstanten sein:
|
Rückgabewert
sp bei Erfolg oder pos_type ( off_type ( - 1 ) ) bei Misserfolg.
Hinweise
seekpos()
wird von
std::basic_streambuf::pubseekpos()
aufgerufen, welches wiederum von den Einzelargument-Versionen von
std::basic_istream::seekg()
und
std::basic_ostream::seekp()
aufgerufen wird.
Viele Implementierungen aktualisieren den Get-Bereich nicht in
seekpos()
, sondern delegieren an
underflow()
, der durch den nächsten
sgetc()
aufgerufen wird.
Beispiel
Bei einigen Implementierungen wird der Get-Bereich durch
seekpos()
geleert und der zweite
underflow()
ist notwendig, um die Effekte zu beobachten.
#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); }
Mögliche Ausgabe:
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.
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 55 | C++98 |
seekpos
lieferte eine undefinierte
ungültige Stream-Position bei Fehler |
pos_type
(
off_type
(
-
1
)
)
wird bei Fehler zurückgegeben |
| LWG 171 | C++98 | die Reihenfolge der Repositionsoperationen war nicht klar | wurde klargestellt |
Siehe auch
|
ruft
seekpos
(
)
auf
(öffentliche Elementfunktion von
std::basic_streambuf<CharT,Traits>
)
|
|
|
[virtual]
|
positioniert die Dateiposition neu, unter Verwendung relativer Adressierung
(virtuelle geschützte Elementfunktion) |
|
bewegt den Dateipositionszeiger an eine bestimmte Stelle in einer Datei
(Funktion) |