Hallo,
ich würde gerne in einem <fstream> seeken. Irgendwie funktioniert das
aber nicht.
//...
info_t PacketReader::getInfo( )
{
cout << "seek_pos: " << info_file.tellg() << endl;
info_t info;
size_t len = info_file.readsome( reinterpret_cast
Bastian Schern schrieb:
Hallo,
ich würde gerne in einem <fstream> seeken. Irgendwie funktioniert das aber nicht.
//...
info_t PacketReader::getInfo( ) { cout << "seek_pos: " << info_file.tellg() << endl; info_t info; size_t len = info_file.readsome( reinterpret_cast
( &info ), info_len ); if( len != info_len ) { info = EMPTY_INFO; } return info; }
info_t PacketReader::getInfo( const fstream::pos_type index ) { const fstream::pos_type seek_pos = index * info_len; info_file.seekg( seek_pos ); cout << "seek_pos: " << seek_pos << endl; if( seek_pos != info_file.tellg() ) { return EMPTY_INFO; }
return getInfo(); }
// ...
int main( int argc, char *argv[] ) { PacketReader pf; pf.openFile( argv[1] ); pf.generateInfoFile(); info_t info = pf.getInfo( ); cout << "\tPacket length: " << info.packet_len << endl;
info = pf.getInfo( ); cout << "\tPacket length: " << info.packet_len << endl;
info = pf.getInfo( 1 ); cout << "\tPacket length: " << info.packet_len << endl;
return 0; }
Ich bekomme folgende Ausgabe:
seek_pos: 0 Packet length: 40 seek_pos: 12 Packet length: 140 seek_pos: 12 seek_pos: 12 Packet length: 0
Viele Grüße Bastian
Hat keiner eine Idee was da schief läuft?
Moin Bastian, Am Wednesday 05 November 2003 15:19 schrieb Bastian Schern:
Bastian Schern schrieb:
ich würde gerne in einem <fstream> seeken. Irgendwie funktioniert das aber nicht.
Was ist den Deiner Meinung nach seeken? Für mich heisst seeken, die Position zuverändern ... [...] ------------------------------------- #include <iostream> #include <fstream> using namespace std; int main(void) { char * filename = "./test.dat"; //Inhalt:"andre_the_seeker" ifstream in(filename, ios::in); cout << "get pointer -> " << in.tellg() << endl; cout << "char get() -> " << in.get() << endl; cout << "get pointer -> " << in.tellg() << endl; cout << "char get() -> " << in.get() << endl; in.seekg(5); // an position 5 seeken cout << "get pointer -> " << in.tellg() << endl; cout << "char get() -> " << in.get() << endl; cout << "get pointer -> " << in.tellg() << endl; cout << "char get() -> " << in.get() << endl; return 0; } ---------------------------- Das ergibt bei mir folgenden output: get pointer -> 0 char get() -> 97 get pointer -> 1 char get() -> 110 get pointer -> 5 char get() -> 95 get pointer -> 6 char get() -> 116 Das ist nur ein einfaches Beispiel, also verzeih' bitte die Unsauberheiten (Fehlerbehandlung!!!, usw usw ...) Es gibt auch noch: istream &seekg( off_type offset, ios::seekdir origin ) AFAIK setzt diese Methode immer ab der aktuellen "get" Position, den Offset weiter ... Ciao Andre
participants (2)
-
Andre Heine
-
Bastian Schern