Kann Datei nicht mehr öffnen: Wie Fehlerstatus anzeigen?



  • Hallole.
    Ich kann auf einmal aus meinem Programm heraus eine Datei nicht mehr öffnen.
    weiß aber nicht was ich geändert haben könnte.
    Der Pfad zur Datei wird dynamisch eingelesen, hat bisher prima funktioniert.
    Der Pfad stimmt definitiv und Berechtigungen habe ich alle.
    Ich habe auch schon versucht den direkten Pfad zur Datei anzugeben, funktioniert genau so wenig, irgendwas stimmt nicht.
    Das Ganze sieht so aus:

    is.open(pfad,ios::in);
    
    		if(is.good())
    		{//nothing to do
    
    		}
    		else
    		{
    			FKT_errorlog("Not able to read the language File",1);
    			FKT_getlast("Languagefile");
    
    			throw("Not able to open the language File");
    		}
    

    GetLastError sagt mir nichts an dieser Stelle.
    Kannich sonst noch herausfinden wo der Fehler sein könnte?
    Hat jemand ne Idee?

    Er springt immer in den else-Zweig, da kann ich machen was ich will....

    Grüße Mondmann



  • 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.



  • was passiert in der good()-Funktion?

    gruß

    pAT



  • www.pat schrieb:

    was passiert in der good()-Funktion?

    gruß

    pAT

    Naja der prüft ob bei den letzte operation etwas schief gegangen ist.
    Ist was schiefgegangen, gibt es false zurück und die fehlerbits werden gesetzt.
    Ich würde aber gerne wissen WAS schiefgeht...



  • Kannst du den code posten plz?

    Mich würde interessieren wie das false von good() zustande kommt.
    Kannst du per Haltepunkte die einzelnen Stationen der good-Funktion überprüfen?
    Welche Variablen verändern sich? Welche Werte bekommen sie?



  • Ich gehe mal davon aus, daß 'is' ein std::istream (oder damit verwandt) ist.

    Mondmann schrieb:

    www.pat schrieb:

    was passiert in der good()-Funktion?

    gruß

    pAT

    Naja der prüft ob bei den letzte operation etwas schief gegangen ist.
    Ist was schiefgegangen, gibt es false zurück und die fehlerbits werden gesetzt.
    Ich würde aber gerne wissen WAS schiefgeht...

    Eine sehr vereinfachte Darstellung 😉

    Die IO-Streams prüfen bei (fast) jeder Operation den Zustand ihrer Daten und setzen im Ernstfall ein Statusflag. good() prüft nun einfach nach, ob eins dieser Fehlerflags gesetzt ist. Du könntest jetzt noch detailiertere Informationen erhalten, indem du fail() (einfacher Fehler, z.B. falsches Eingabeformat) , bad() (mittlere Katastrophe im Stream), eof() (Eingabeende erreicht) oder is_open() (nur für fstreams: Datei wurde geöffnet) abfragst.
    (aber afaik gibt es keine Möglichkeit herauszufinden, WARUM eine Datei nicht geöffnet werden konnte)



  • CStoll schrieb:

    Ich gehe mal davon aus, daß 'is' ein std::istream (oder damit verwandt) ist.

    Mondmann schrieb:

    www.pat schrieb:

    was passiert in der good()-Funktion?

    gruß

    pAT

    Naja der prüft ob bei den letzte operation etwas schief gegangen ist.
    Ist was schiefgegangen, gibt es false zurück und die fehlerbits werden gesetzt.
    Ich würde aber gerne wissen WAS schiefgeht...

    Eine sehr vereinfachte Darstellung 😉

    Die IO-Streams prüfen bei (fast) jeder Operation den Zustand ihrer Daten und setzen im Ernstfall ein Statusflag. good() prüft nun einfach nach, ob eins dieser Fehlerflags gesetzt ist. Du könntest jetzt noch detailiertere Informationen erhalten, indem du fail() (einfacher Fehler, z.B. falsches Eingabeformat) , bad() (mittlere Katastrophe im Stream), eof() (Eingabeende erreicht) oder is_open() (nur für fstreams: Datei wurde geöffnet) abfragst.
    (aber afaik gibt es keine Möglichkeit herauszufinden, WARUM eine Datei nicht geöffnet werden konnte)

    Das ist aber schade, bei den C-Fileoperationen kann ich festsellen was passiert. Ob er die Datei nicht öffnen konnte, keine Berechtigung usw....

    Aber ok, etwas genauer kann ichs nun mal abfragen..



  • Ist nicht cerrno Teil von C++98 und damit evtl. auf C++-Streams genauso anwendbar wie auf C-Streams?

    EDIT:
    Hab's grad gesehen, errno im Standard gibt nicht wirklich mehr her als die std-Exceptions. Hab mich da wohl von UNIX verblenden lassen 😉


Anmelden zum Antworten