filestream mehrmals benutzen



  • otze schrieb:

    mir wurde letztens klargemacht, dass es sehr unschön sein soll, in nem filestream open/close zu benutzen, anstatt den ctor/dtor die arbeit machen zu lassen..

    ...ist aber unumgänglich, wenn du das *selbe* Objekt mehrfach benutzen willst.

    @C14
    Wahrscheinlich ist das eof bzw. das fail-bit gesetzt. Diese bits werden von close nicht gelöscht. Du musst vorher also noch die Memberfunktion clear() aufrufen.



  • HumeSikkins schrieb:

    otze schrieb:

    mir wurde letztens klargemacht, dass es sehr unschön sein soll, in nem filestream open/close zu benutzen, anstatt den ctor/dtor die arbeit machen zu lassen..

    ...ist aber unumgänglich, wenn du das *selbe* Objekt mehrfach benutzen willst.

    ich wollte am anfang auch vieles, das habt ihr mir aber erfolgreich ausgetrieben,mit den worten: das macht man so nicht 😉



  • HumeSikkins schrieb:

    ...ist aber unumgänglich, wenn du das *selbe* Objekt mehrfach benutzen willst.

    Warum will ich das?
    Was ist an diesem einen Objekt so besonders?



  • Ahja, eof war gesetzt.
    Vielen Dank für den Tipp mit clear!



  • Warum will ich das?

    Keine Ahnung. Ich kenne deine konkrete Situation nicht.

    Was ist an diesem einen Objekt so besonders?

    Keine Ahnung. Was ist an einem neuen Objekt besser? Macht es den Code klarer? Wirkt die Funktion überladen, wenn ein Objekt mehrere Dateien bearbeitet?
    Wie gesagt, ich kenne deine konkrete Situation nicht.

    Btw: Wenn ich mich recht entsinne, habe ich nirgends behauptet man solle unbedingt das selbe Objekt mehrfach benutzen. Ich bevorzuge hier normalerweise auch mehrere Objekte. Zumindest dann, wenn der Code dadurch klarer wird.
    Das ändert aber nichts an an der Tatsache, dass die die Frage lautete "wie kann man denn mit einem input-filestream mehrere Datein hintereinander auslesen?". Eine Antwort sollte imo schon auf den Zusammenhang von open/close/clear und die Statusbits eines Streams eingehen.
    *Optional* kann darauf gerne ein Hinweis folgen, dass es bessere Alternativen gibt. Nur dieser Hinweis erscheint mir aber etwas dünn.



  • open/close bringen ja absolut keine vorteile, was bringt es mir, das objekt auf eine andere datei auszurichten? ersteinmal bringts mir unübersichtlichkeit.
    wieso bringt es mir unübersichtlichkeit?
    ganz einfach, man kann den objekt keinen aussagekräftigen namen geben, man muss also immer den letzten ctor oder das letze open im kopf haben.
    somit wird das überfliegen des codes sehr schwierig.
    als vorteil kann man anmerken, dass man etwas weniger speicher im stack belegt, aber das kann man getrost ausser acht lassen.



  • otze schrieb:

    als vorteil kann man anmerken, dass man etwas weniger speicher im stack belegt, aber das kann man getrost ausser acht lassen.

    Wieso weniger Speicher?

    {
      ofstream f("foo");
      do_something();
    }
    {
      ofstream f("foo");
      do_something();
    }
    
    //versus
    ofstream f("foo");
    do_something();
    
    f.close();
    f.clear(); //flags löschen, uU geht es anders - ich weiss es nicht
    
    f.open("foo");
    do_something();
    

    ah, ich habe sogar mehr code - es sieht aus wie eine Wurst... ne, das mag ich nicht.



  • [quote="Shade Of Mine"]

    otze schrieb:

    als vorteil kann man anmerken, dass man etwas weniger speicher im stack belegt, aber das kann man getrost ausser acht lassen.

    Wieso weniger Speicher?
    [quote]

    ofstream a("datei1.txt");
    ofstream b("datei2.txt");
    


  • otze schrieb:

    ofstream a("datei1.txt");
    ofstream b("datei2.txt");
    

    Naja, da kann ich auch nix machen. Wenn man 2 Dateien gleichzeit offen hat, ist es halt etwas anderes als 2 Dateien nacheinander zu öffnen. Gleichzeitig 2 Dateien offen zu haben, kostet halt mehr Speicher als nur eine kosten würde 😉



  • arrgh denkfehler zu später stunde...gn8^^


Anmelden zum Antworten