std::basic_istream<CharT,Traits>::seekg
Von cppreference.com
< cpp | io | basic istream
| basic_istream& seekg( pos_type pos ); |
(1) | |
| basic_istream& seekg( off_type off, std::ios_base::seekdir dir ); |
(2) | |
Setzt den Eingabepositionsanzeiger des zugehörigen streambuf-Objekts.
Vor allen anderen Operationen löscht seekg das eofbit. |
(seit C++11) |
seekg verhält sich wie eine UnformattedInputFunction, außer dass gcount() nicht beeinflusst wird. Nach dem Erstellen und Überprüfen des Sentry-Objekts,
1) Wenn fail() != true ist, wird der Eingabepositionsanzeiger auf den absoluten Wert (relativ zum Dateianfang) pos gesetzt. Genauer gesagt, wird rdbuf()->pubseekpos(pos, std::ios_base::in) aufgerufen (pubseekpos ruft wiederum seekpos des spezifischen Puffers auf, wie z.B. basic_filebuf::seekpos, basic_stringbuf::seekpos oder strstreambuf::seekpos). Im Fehlerfall wird setstate(std::ios_base::failbit) aufgerufen.
2) Wenn fail() != true ist, wird der Eingabepositionsanzeiger auf die Position off gesetzt, relativ zur durch dir definierten Position. Genauer gesagt, wird rdbuf()->pubseekoff(off, dir, std::ios_base::in) aufgerufen. Im Fehlerfall wird setstate(std::ios_base::failbit) aufgerufen.
Inhalt |
[edit] Parameter
| pos | - | absolute Position, auf die der Eingabepositionsanzeiger gesetzt werden soll | ||||||||
| off | - | relative Position (positiv oder negativ), auf die der Eingabepositionsanzeiger gesetzt werden soll | ||||||||
| dir | - | definiert die Basisposition, auf die der relative Offset angewendet wird. Es kann eine der folgenden Konstanten sein
|
[edit] Rückgabewert
*this
[edit] Ausnahmen
Wenn eine interne Operation eine Ausnahme auslöst, wird diese abgefangen und badbit gesetzt. Wenn exceptions() für badbit gesetzt ist, wird die Ausnahme erneut ausgelöst.
[edit] Hinweise
seekg(n) ist nicht notwendigerweise äquivalent zu seekg(n, ios::beg). std::basic_ifstream zum Beispiel erfordert, dass die absolute Position n von tellg() stammt.
[edit] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <sstream> #include <string> int main() { std::string str = "Hello, world"; std::istringstream in(str); std::string word1, word2; in >> word1; in.seekg(0); // rewind in >> word2; std::cout << "word1 = " << word1 << '\n' << "word2 = " << word2 << '\n'; }
Ausgabe
word1 = Hello, word2 = Hello,
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 129 | C++98 | es gab keine Möglichkeit, einen Fehler anzuzeigen | setzt failbit bei einem Fehler |
| LWG 136 | C++98 | seekg könnte den Ausgabestream setzen |
setzt nur den Eingabestream |
| LWG 537 | C++98 | der Typ von off war off_type& |
korrigiert zu off_type |
[edit] Siehe auch
| gibt den Eingabepositionsindikator zurück (public member function) | |
| gibt den Ausgabepositionsindikator zurück (public member function of std::basic_ostream<CharT,Traits>) | |
| setzt den Ausgabepositionsindikator (public member function of std::basic_ostream<CharT,Traits>) | |
| ruft seekpos() auf (öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) | |
| [virtuell] |
positioniert die Dateiposition neu, unter Verwendung absoluter Adressierung (virtual protected member function of std::basic_filebuf<CharT,Traits>) |
| [virtuell] |
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beidem neu, unter Verwendung absoluter Adressierung (virtual protected member function of std::basic_stringbuf<CharT,Traits,Allocator>) |
| [virtuell] |
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beidem neu, unter Verwendung absoluter Adressierung (virtual protected member function of std::strstreambuf) |
| ruft seekoff() auf (öffentliche Member-Funktion von std::basic_streambuf<CharT,Traits>) | |
| [virtuell] |
positioniert die Dateiposition neu, unter Verwendung relativer Adressierung (virtuelle protected Member-Funktion von std::basic_filebuf<CharT,Traits>) |
| [virtuell] |
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beidem neu, unter Verwendung relativer Adressierung (virtuelle protected Member-Funktion von std::basic_stringbuf<CharT,Traits,Allocator>) |
| [virtuell] |
positioniert den nächsten Zeiger in der Eingabesequenz, Ausgabesequenz oder beidem neu, unter Verwendung relativer Adressierung (virtuelle protected Member-Funktion von std::strstreambuf) |