Problem mit tellg()
-
Hi
ich lese eine datei über einen fstream ein und möchte das einlesen gerne zu einem späteren zeitpunkt fortsetzen.
Dafür will ich mitdateiPos = datei.tellg();die Position in der Datei abspeichern.
Der Wert wird aber immer auf 0 gesetzt, auch wenn ich schon über 5000Byte eingelesen habe. Was mache ich den da falsch.dateipos ist vom typ long.
fstream datei; int anzByte = 0; char Buffer[1024]; int pC = 0; datei.clear(); datei.open(Datei.c_str(), ios::in); datei.seekp( dateiPos, ios_base::beg); if(datei.good() && datei.is_open()) { while(!datei.eof() && pC < 4) { for(int i = 0; i < 1024 && !datei.eof();i++) { Buffer[i] = datei.get(); anzByte = i; } //Daten verarbeiten pC++; //ClientSocket1->Socket->SendBuf(Buffer,999); } if(datei.eof()) { //Ok Datei zuende. Datei = ""; } else { Datei = "c:\\pagefile001.bmp"; //Position abspeichern. dateiPos = datei.tellg(); } datei.close();
-
Erstens: Wo hast du denn Datei und dateiPos definiert? Womöglich sind sie ja zwischenzeitlich aus dem Scope gefallen.
Zweitens: Du solltest mal im Debugger verfolgen, wo genau sich der Wert zurücksetzt. Und eventuell solltest du auch die übrigen Fehlerbits des Streams abfragen (vor allem fail()) und noptfalls zurücksetzen (clear()).
Drittens: Um die Leseposition des Streams festzulegen, verwendet mann seekg() und nicht seekp() (letzteres setzt die Schreibposition).