ifstream



  • Hallo allerseits!
    ich verstehe folgendes nicht:

    ifstream dictionary (s.c_str()); 
     if (!dictionary) // were there any errors on opening?
    

    nun lese ich in der Hilfe folgendes:

    A type basic_ifstream specialized on char template parameters.
    typedef basic_ifstream<char, char_traits<char> > ifstream;

    Was ich hier nicht sehe ist ein Rückgabewert, auf den die if(!dictionary)
    testet.
    Wie ist ifstream nun zu verstehen?
    Danke
    To



  • operator !()
    Returns whether the stream has run into an error (corresponds to fail())

    😉



  • verstehe ich trotdem nicht.
    in:

    ifstream dictionary (s.c_str());
    

    wird versucht Argument von dictionary zu öffnen. Was hält dictinary nun?
    Nen Filepointer oder was?
    Und kann man mir erklären, wie diese Zeile hier zu verstehen ist:

    typedef basic_ifstream<char, char_traits<char> > ifstream;
    

    Danke.



  • Was ifstream hält ist doch egal... zumindest für dich als Benutzer(in) dieser Klasse. Ist ja auch der Sinn von Kapselung.

    Dich wundert wohl eher das if-Konstrukt?!

    Kennst du dich bereits mit Operator-Überladung aus? Wenn nicht, wirst du auch das if-Konstrukt nicht verstehen. Selbst wenn du jetzt wüsstest, was ifstream "hält". (ist unwichtig!).

    operator !()
    Returns whether the stream has run into an error (corresponds to fail())

    Das heißt, wenn du den !-Operator auf ein fstream-Objekt anwendest (was bei dem if-Konstrukt passiert ist), bekommst du ein true zurück, wenn ein error im fstream ist. Dieser !-Operator macht das gleiche wie fail().

    Hätte man also auch machen können:

    if(directory.fail())
    


  • basic_ifstream ist eine Template-Klasse, die sich um Datei-Operationen kümmert - die kann spezialisiert werden als char (ASCII-Files -> ifstream) oder wchar_t (UNICODE-Files -> wifstream).

    Die Anweisung "ifstream dict(s.c_str());" erzeugt ein Stream-Objekt mit dem Namen dict und verbindet es mit der Datei auf Festplatte, deren Name in s steht. Der operator!() eines streams gibt true zurück, wenn mit einer vorigen Datei-Operation (in deinem Beispiel "Datei öffnen") etwas schief gelaufen ist.



  • Theresa_Orl schrieb:

    Und kann man mir erklären, wie diese Zeile hier zu verstehen ist:

    typedef basic_ifstream<char, char_traits<char> > ifstream;
    

    Danke.

    Ist nur ein typedef. Also eine Art "Alias". basic_ifstream ist ein Template und es wäre nervig wenn man immer basic_ifstream<char, char_traits<char> > schreiben müsste. ALso gibt es schon eine Typdefinition (aha! typedef!) die ifstream heißt, die man sich auch einfacher merken kann. Hättest aber auch das schreiben können:

    basic_ifstream<char, char_traits<char> > directory("irgendwas");
    

    Wäre aber ziemlich nervig. 😉



  • Gut.. ok. Vielen Dank für Eure Hilfe.
    Werde wohl mal mit Operatorüberladung vorlieb nehmen müssen.


Anmelden zum Antworten