if ( !file )



  • Gibt es einen Unterschied bei

    std::ifstream file( filename );
    if ( !file )
    

    und

    std::ifstream file( filename );
    if ( !file.is_open() )
    

    ? Bringt es was, beides zu prüfen?



  • #include <fstream>
    #include <iostream>
    
    int main()
    {
    	std::cout << "open\tbool\tgood\tfail\tbad\teof\n";
    	{
    		std::ifstream is{ "file" };
    		std::cout << std::boolalpha << is.is_open() << '\t' << (bool)is << "\t" << is.good() << "\t" << is.fail() << "\t" << is.bad() << "\t" << is.eof() << '\n';
    	}
    	{
    		std::ifstream is{ "not_existing_file" };
    		std::cout << std::boolalpha << is.is_open() << '\t' << (bool)is << "\t" << is.good() << "\t" << is.fail() << "\t" << is.bad() << "\t" << is.eof() << '\n';
    	}
    }
    
    open    bool    good    fail    bad     eof
    true    true    true    false   false   false
    false   false   false   true    false   false
    

    Nö, bringt nichts.



  • Danke 🙂 Und danke für den Hintergrund.

    Obwohl ich gerade merke, brauch ich noch ein wenig, um das richtig zu verstehen.

    Wenn ich jetzt eine Fehlermeldung schreibe, ist das richtig, in beiden Fällen davon auszugehen, das kein solches file existiert?



  • Einen Unterschied gibt es:

    {
    		std::ifstream is{};
    		std::cout << std::boolalpha << is.is_open() << '\t' << (bool)is << "\t" << is.good() << "\t" << is.fail() << "\t" << is.bad() << "\t" << is.eof() << '\n';
    	}
    

    Theoretisch wäre es also besser, is_open zu verwenden.



  • Ich wollte schon fast eine SeppJ-Style Fußbnote über Klugscheißer schreiben ... hätt ichs bloß getan.


Log in to reply