Problem mit fstream



  • Ich habe ein paar probleme mit fstream bzw ifstream.

    Wenn ich eine bestimmte Datei öffne und dann so durchlaufe

    while(!in->eof() && !in->bad())
                {
                   in->getline(temp,1024);
                   line=temp;
                   if(line.find("Disk",0)<1025)
                   {
                      out<<line.c_str()<<"\n";
                   }
                }
    

    Dann läuft er ewig weiter und findet das ende der Datei nicht! Bei anderen Dateien die gleich aufgebaut sind hab ich das Problem nicht. Woran kann das liegen ?
    Bei der Datei handelt es sich um eine exportierte ereignisanzeige von Windows.

    Ein weiteres Problem ist. Wenn ich mehrere Dateien nach einander öffne und das "in" Objekt nicht lösche dann macht er bei der zweiten Datei schlapp(er liesst irgendwie bullshit ein ;))... auch wenn ich die Datei vor dem öffnen einer neuen schließe!



  • Hallo,
    wahrscheinlich ist das failbit gesetzt (kannst du mit der Methode fail() prüfen). In diesem Fall werden keine Zeichen gelesen und du erreichst demzufolge auch nie das Ende der Eingabe.

    Btw: http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=eof#Answ



  • Danke!
    Gute seite 🙂 Das mit dem fail hats gebracht. Bzw. Ich benutze jetzt good... das hatte ich vorher auch schonmal benutzt aber irgendwie hatte es da nicht gefunzt.

    Mein zweites Problem sollte dann damit gelösst sein das die leseposition durch einen aufruf von close() nicht zurück gesetzt wird. Hab ich allerdings noch nicht getestet ...



  • Doch, den Lesezeiger dürfte er neu setzen, allerdings nicht die Fehlerflags - die mußt du mit "in->clear();" selber zurücksetzen, bevor du weitermachen kannst.

    (PS: Es ist übrigens idR nicht nötig, Streams dynamisch anzulegen. Was für einen Grund hast du also, da über Pointer zuzugreifen?)



  • Es könnte z.B. eine Methode / Funktion sein, die einen Stream übergeben bekommt aber auch aufgerufen wird wenn kein Stream vorhanden ist (also als NULL Pointer dargestellt wird).


Anmelden zum Antworten