Wie kann ich prüfen ob eine Datei mit einem bestimmten Namen vorhanden ist?



  • happystudent schrieb:

    Also wenn wir schon bei lesbarkeit sind find ich das Zerhacken des output strings viel bemerkenswerter als das not keyword... Vor allem weils noch nicht mal kürzer ist 😃

    msg.Format( _T("%u site%s found"), sites, sites > 1 ? _T("s") : _T("") );
    

    😉



  • happystudent schrieb:

    Also wenn wir schon bei lesbarkeit sind find ich das Zerhacken des output strings viel bemerkenswerter als das not keyword... Vor allem weils noch nicht mal kürzer ist 😃

    std::cout << (boost::filesystem::exists("my.dat") ? "F" : "Not f") << "ound"; // F not found?
    std::cout << (boost::filesystem::exists("my.dat") ? "Found" : "Not found");
    

    Nee, ist gleich lang, wenn man wie ich die nutzlosen Leerzeichen wegläßt. (Dafür 24p-Font, wer echt mehr als 80x25 monochrom braucht, hat ein Problem im Code.)

    std::cout<<(boost::filesystem::exists("my.dat")?"F":"Not f")<<"ound";
    std::cout<<(boost::filesystem::exists("my.dat")?"Found":"Not found");
    std::cout<<"Not f\0Found"[boost::filesystem::exists("my.dat")*7];
    

    Ist aber alles nix, was ich ohne Leerzeichen schreiben würde, also gehts noch übersichtlicher bei gleicher Performance, würde ich vermuten.



  • volkard schrieb:

    std::cout<<"Not f\0Found"[boost::filesystem::exists("my.dat")*7];
    

    Gibt je nachdem ob das File existiert 'N' oder 'o' aus.
    Und nichtmal mit + statt [] würde ein Schuh draus, denn dann würde "Not f" bzw. "ound" ausgegeben.



  • Arcoth schrieb:

    Falls du, wie es scheint, einfach den Inhalt überschreiben möchtest falls die Datei existiert, reicht es den Ausgabestream mit std::ios_base::trunc zu öffnen. I.e. man muss dann gar nicht die Existenz der Datei prüfen.

    Nicht ganz, ich möchte prüfen ob die datei vorhanden ist und dann, falls ja, etwas auslesen.



  • Auch beim Lesen musst du die Existenz der Datei nicht vorher prüfen. Es reicht aus nach dem Öffnen zu überprüfen, ob die Datei geöffnet werden konnte. Z. B.:

    std::ifstream is("datei");
    if (!is)
    {
        // Datei konnte nicht geöffnet werden
    }
    

  • Mod

    Ich glaube, hustbaers Aussage bestätigt sich gerade.
    Warum nicht einfach lesen?

    std::ifstream is("datei");
    if (!(is >> myObj))
    {
        // Konnte - aus welchem Grund auch immer - nicht lesen
    }
    

    Solltest du tatsächlich den Fall "Konnte Datei nicht öffnen" (nicht "Datei existiert nicht", denn zwischen dem und e.g. "Keine Leserechte gegeben" besteht kein Unterschied für deine Zwecke) gesondert behandeln wollen, nimm is_open .


Anmelden zum Antworten