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.


Anmelden zum Antworten