Dateien - Klasse ofstream



  • In eine Datei kann ich so schreiben:

    ofstream fout;
    fout.open ("output.txt");
    if (fout.goo())
    {
    for (i=0; i<N; i++)
    {
    fout >> array[i];
    }
    }
    else
    {
    //error
    }

    aber warum kann ich auch so darauf zugreifen:

    if (fout)
    {
    ...
    }

    hierbei wird ja keine Methode aufgerufen.

    MFG Tobi



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo

    Dein erstes Beispiel ist auch nicht ganz fehlerfrei... wahrscheinlich Schreibfehler. Allerdings solltest du die Code-Tags verwenden ( sfds )

    Zum Thema Dateizugriff findest du in der C++ FAQ den Beitrag "Dateien und Ströme".

    bis bald
    akari



  • Also mit fout.goo() wirst du vermutlich nicht sehr weit kommen 😉

    XTobiX schrieb:

    aber warum kann ich auch so darauf zugreifen:

    if (fout)
    {
    ...
    }

    hierbei wird ja keine Methode aufgerufen.

    MFG Tobi

    Nein, aber ein eingebauter Konvertierungsoperator (nach void*).



  • hmm ne eigentlich sollte nicht nach void konvertiert werden oder? müssten die failbits usw abgefragt werden ... naja ...

    std::ofstream file_stream("output.txt", std::ios::out);
    
    if (!file_stream)
        return false; // file could not be opened
    
    file_stream << "Das ist ja witzig :) ";
    file_stream.close();
    


  • (D)Evil schrieb:

    hmm ne eigentlich sollte nicht nach void konvertiert werden oder? müssten die failbits usw abgefragt werden ... naja ...

    std::ofstream file_stream("output.txt", std::ios::out);
    
    if (!file_stream)
        return false; // file could not be opened
    
    file_stream << "Das ist ja witzig :) ";
    file_stream.close();
    

    Nicht nach "void", nach "void*****" (und ein void* kann vom Compiler implizit nach bool umgewandelt werden) 😉

    Und die entsprechenden Operatoren sehen etwa so aus:

    template<...>
    class basic_ios
    {
      ...
    public:
      operator void*()
      {
        return good()?this:NULL;
      }
      bool operator!()
      {
        return bad();
      }
    }
    

Anmelden zum Antworten