system_error



  • Hi 🙂

    Mich verwirrt ein neues Buch ein wenig. Habe ich das richtig verstanden, dass man Systemfehler mittels try-catch abfangen kann, wo ursprünglich gar keine Exceptions geworfen wurden, man den Fehler jedoch mittels system_error catchen kann??

    Im Buch gibt es ein Beispiel dazu:

    Directory myDirectory("/home/bjarne/");
    try {
       myDirectory.CreateSubDirectory("newdir");
    } catch(const std::system_error& exc) {
       if (exc.code() == std::errc::file_exists) {
          ...
       } else throw;
    }
    

    Das Problem ist, ich kann dieses Beispiel nicht nachvollziehen. Ich finde zwar http://msdn.microsoft.com/en-us/library/System.IO.Directory_methods%28v=vs.110%29.aspx, dort gibt es jedoch keine Methode CreateSubDirectory 😕

    Die Methode CreateDirectory wirft jedoch jede Menge Exceptions: http://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx

    Meint der Buchautor vielleicht diese Methode CreateDirectory? Und sind die auf der msdn-Webseite aufgelisteten möglichen Exceptions alle Untertypen von system_error? Lt. http://msdn.microsoft.com/en-us/library/system.io.ioexception(v=vs.110).aspx scheint das eigentlich nicht der Fall zu sein, wenn man sich anschaut, welche Klassen von welchen Klassen erben.



  • tröröö schrieb:

    Hi 🙂
    Mich verwirrt ein neues Buch ein wenig.

    Welches?

    tröröö schrieb:

    Habe ich das richtig verstanden, dass man Systemfehler mittels try-catch abfangen kann, wo ursprünglich gar keine Exceptions geworfen wurden, man den Fehler jedoch mittels system_error catchen kann??

    Joa, theoretisch schon, ist aber in C++ nicht so üblich. Oder sprichst Du von C++/CLI, also der C++-ähnlichen Sprache auf Microsofts .net-Bibliothek? Oder haste Qt oder sowas drunter?

    tröröö schrieb:

    Im Buch gibt es ein Beispiel dazu:

    Directory myDirectory("/home/bjarne/");
    try {
       myDirectory.CreateSubDirectory("newdir");
    } catch(const std::system_error& exc) {
       if (exc.code() == std::errc::file_exists) {
          ...
       } else throw;
    }
    

    Das Problem ist, ich kann dieses Beispiel nicht nachvollziehen. Ich finde zwar http://msdn.microsoft.com/en-us/library/System.IO.Directory_methods%28v=vs.110%29.aspx, dort gibt es jedoch keine Methode CreateSubDirectory 😕

    Wäre untypisch für bjarne, reine Microsoft-Funktionen zu nehmen.

    tröröö schrieb:

    Die Methode CreateDirectory wirft jedoch jede Menge Exceptions: http://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx

    Die ist kein C++.

    tröröö schrieb:

    Meint der Buchautor vielleicht diese Methode CreateDirectory? Und sind die auf der msdn-Webseite aufgelisteten möglichen Exceptions alle Untertypen von system_error?

    Ganz unwahrscheinlich.



  • Welches?

    C++11, Praxiswissen zum neuen Standard
    von Peter Pohmann
    entwickler.press

    Oder sprichst Du von C++/CLI, also der C++-ähnlichen Sprache auf Microsofts .net-Bibliothek?

    Öhm, gibts da irgendwie unterschiedliche Varianten von C++?
    Ich hab da auf https://en.wikipedia.org/wiki/C%2B%2B nach CLI oder NET gesucht, davon wird dort nichts erwähnt. 😕

    Wäre untypisch für bjarne, reine Microsoft-Funktionen zu nehmen.

    Verstehe ich nicht. Heißt das, dass es die Methode Directory::CreateSubDirectory wirklich gibt?



  • tröröö schrieb:

    Oder sprichst Du von C++/CLI, also der C++-ähnlichen Sprache auf Microsofts .net-Bibliothek?

    Öhm, gibts da irgendwie unterschiedliche Varianten von C++?
    Ich hab da auf https://en.wikipedia.org/wiki/C%2B%2B nach CLI oder NET gesucht, davon wird dort nichts erwähnt. 😕

    Aber auf http://msdn.microsoft.com/en-us/library/54a0at6s(v=vs.110).aspx (der Link kommt von Dir) kannste bei "Syntax" auf "C++" klicken, und er zeigt dann

    public:
    static DirectoryInfo^ CreateDirectory(
    	String^ path
    )
    

    und das ist kein C++, auch wenn MS das uns glauben machen wollte.
    …pedia nennt es eine Variante von C++. https://de.wikipedia.org/wiki/C%2B%2B/CLI der englische Artikel ist wiedermal besser. https://en.wikipedia.org/wiki/C%2B%2B/CLI



  • Also auf https://en.wikipedia.org/wiki/C%2B%2B/CLI sehe ich da einige syntaktische Sachen, die ich bis jetzt noch nicht kannte. Ich vermute deshalb einfach mal, dass ich NICHT in C++/CLI programmiere 😃

    Darum gehe ich mal davon aus, dass das Script in "normalen" C++ programmiert ist. Darf man das so sagen? "Normales" C++?



  • tröröö schrieb:

    Welches?

    C++11, Praxiswissen zum neuen Standard
    von Peter Pohmann
    entwickler.press

    Leider bietet das Buch bei Amazon keine Leseprobe an und Rezensionen gibt's auch noch nicht.

    Der Klappentext scheint aber C++/CLI zu meinen, in diesem Fall würden Autor und Verlag es dann einfach mal aus Unwissenheit oder mit Betrugsabsicht C++ nennen, *lach*

    Seine Plattform ist jetzt (nach vielen Jahren Delphi) hauptsächlich .NET mit C# und C++ in allen Ausprägungen.

    Dann ist vermutlich diese CreateSubDirectory() gemeint.
    http://msdn.microsoft.com/de-de/library/h8dtw1d6(v=vs.110).aspx

    Passt aber gar nicht zu std::system_error, Sachen aus dem .net-Framwork müßten System::Exception oder Erben werfen.



  • Auf http://entwickler.de/press/C-11 gibts ein Probekapitel. Dort steht eigentlich nichts von .NET oder CLI.



  • tröröö schrieb:

    Auf http://entwickler.de/press/C-11 gibts ein Probekapitel. Dort steht eigentlich nichts von .NET oder CLI.

    Sieht nach lupenreinem C++ aus.

    Das Beispiel ist vielleicht nur zur Erläuterung des Exception-Handlings gedacht, und der Benutzer soll sich halt die passende Directory-Klasse vorstellen.



  • Im Zweifelsfall schickt man dem Buchautor eine E-Mail. Vielleicht findet er ja Zeit, sich das anzuschauen. 🙂



  • Hier spricht der Buch-Autor 😉

    Ich fürchte, ich habe Sie da unnötigerweise verwirrt. Es geht ja um das neue Exception-Handling und nicht um das Arbeiten mit Verzeichnissen. Da habe habe ich mir ein fiktives CreateDirectory ausgedacht, dass sozusagen aus einer virtuellen Library stammt.

    Gerade der Umgang mit Files und Verzeichnissen ist eine Quelle von vielen verschiedenen Ausnahmen unterschiedlicher Bedeutung und Relevanz. Deshalb verwende ich das Thema in Kursen, Vorträgen etc. immer gerne für Erläuterungen zur Ausnahmebehandlung. In diesem Fall habe ich das ohne weitere Erklärung einfach so hingeschrieben. Sorry, das machen wir in der nächsten Auflage besser.

    Wenn Ihnen das Buch gefallen hat, würde ich mich übrigens sehr freuen, wenn Sie eine Rezension auf Amazon schreiben könnten.

    Herzliche Grüße
    Peter Pohmann



  • OK. Ich habe auch eine E-Mail bekommen. Damit kann ich bestätigen, dass der Eintrag auch wirklich vom Buch-Author stammt. Danke 🙂



  • Da bin ich aber beeindruckt!
    Ein Buchautor, der sich in einem Community Board seines Fachs herumtreibt, finde ich gut!



  • Also ich habe die Erfahrung gemacht, dass die meisten Leute sehr umgänglich sind und sich über konstruktives Feedback immer freuen. Man muss keine Angst davor haben, Professoren oder Buch-Autoren anzuschreiben. Allerdings sollte man sie nicht fortlaufend mit E-Mails bombardieren, das nervt sie dann sicher. 🙂



  • tröröö schrieb:

    Also ich habe die Erfahrung gemacht, dass die meisten Leute sehr umgänglich sind und sich über konstruktives Feedback immer freuen...

    Du solltest das "meisten" fett hinterlegen - habe leider zu genüge schon das Gegenteil erlebt. Viele können, selbst wenn man bewusst nur E-Mail oder 4-Augengespräch wählt, nicht mit Kritik umgehen. Sei es bei Autoren, sei es bei Dozenten (erst vor wenigen Wochen wieder so einen Fall erlebt).


Log in to reply