tellg() bringt meine Einleseroutine durcheinander
-
Ich habe eine 100% funktionierende Einleseroutine die eine Datei zeilenweise liest und immer die Zeichen an der 30-34 Stelle extrahiert.
Nun wollte ich das für den Benutzer visualisieren in Form eines Statusbalken:// Wird nach jeder Zeile aufgerufen und an den Statusbalken übergeben (static_cast<float>(file.tellg()) / (static_cast<float>(filesizeInByte)/100)));
Das klappt aber nicht bei allen Dateien, einige werden dann nicht mehr richtig gelesen deswegen habe ich das Gefühl das tellg() irgendwas verändert
Das Program lief 6 Monate fehlerfrei, erst wenn tellg() ins Spiel kommt gibt es Ärger
-
Ok hier mehr Code:
ifstream logfile(filename, ios::in); if(logfile) { logfile.seekg(0L, ios::end); byte = logfile.tellg(); // Größe in Byte speichern }
Danach wird die Datei geschlossen und irgendwann später wieder geöffnet:
ifstream logfile(filename); for(string line; getline(logfile, line);) { setProgress((static_cast<float>(logfile.tellg()) / (static_cast<float>(byte)/100))); /* Diese Zeile verursacht Ausleseprobleme (Buchstaben verschwinden), ich vermute tellg() springt doch irgendwie im Strom */ // [...] }
Weiß jemand mehr?
-
Du benutzt nicht zufällig einen recht alten gcc?
-
Nein aber ein recht altes Visual Studio. Darf ich deinem Kommentar entnehmen das von dem Code den du siehst alles i.O. sein müsste?
-
Der Code ist o.k.. Er funktioniert auch bei mir (MSVC6SP6).
Du könntest statt tellg zu benutzen, die Länge der Strings aufsummieren.