seekg funktioniert nicht



  • Hallo Leute,
    ich benutze die folgende Funktion um eine Datei zu öffnen
    fstream *inPrgData;
    ...
    inPrgData = new fstream (FileName.c_str(),ios::in | ios::nocreate);
    inPrgData->seekg(0);
    ...

    In einer Schleife ermittle ich die Anzahl der Zeilen.

    while (!inPrgData->eof())
    {
    inPrgData->getline(RecLine,MAX_REC_LINE -1);
    CountLine++;
    }
    ...

    Danach will ich eigentlich mit
    ...
    inPrgData->seekg (0, ios::beg)
    ...
    (oder auch mit seekp) an den Dateianfang zurückspringen.

    Das funktioniert so nicht!

    Ich helfe mir im Moment mit
    delete inPrgData;
    inPrgData = new fstream (FileName.c_str(),ios::in | ios::nocreate);
    inPrgData->seekg(0);

    Das geht zwar, ist aber nicht elegant. Habe schon diverse Artikel im Forum gelesen und die Seite http://www.cplusplus.com/ref/iostream/istream/seekg.html besucht, hilft aber alles nicht weiter.

    Was mach ich falsch?

    Danke



  • Hallo,

    Das funktioniert so nicht!

    Wo ist dein Pointer denn? Kommt irgendne Fehlermeldung? Ich kann jetzt auch keinen Fehler entdecken. Benutzt mal Codetags.



  • Ahja, du musst erst das EOF Flag löschen:

    inPrgData->clear();
    

    Ich würde die Daten auch so einlesen:

    while (inPrgData->getline(RecLine, 200)){
                    CountLine++;
            }
    

    Ansonsten zählst du das EOF Flag mit und hast immer eine Zeile mehr, als tatsächlich in der Datei stehen.



  • Hallo Carsten,
    du warst schneller als ich. Ich wollte gerade eine Antwort auf deinen ersten Beitrag posten als die Lösung ankam. Hat 100%ig geholfen. Vielen Dank für die prompte Hilfe
    Sailskip


Anmelden zum Antworten