Tuesday 7 November 2017

Gethrforexception Ioexception C #


Ich finde, dass manchmal in IO-Operationen gemeinsame IOException geworfen wird. Ich kann Marshal. GetHRForException (Exception e) - Methode (hier gefunden), um den spezifischen Fehlercode zu bestimmen. Danach möchte ich eine Ausnahme wieder auslösen, indem ich meinen anwendungsspezifischen Fehlercode verwende, um dem Benutzer einige Tipps zu geben, was falsch gelaufen ist. Aber ich war nicht in der Lage, die Liste der möglichen HResult Werte für IOException zu finden. Eine weitere Sache Im stecken mit ist, dass für verschiedene HResult-Codes Root-Ursache kann das gleiche sein - zum Beispiel 0x8007052E und 0x80070569 - beide entsprechen Logon-Fehler: unbekannter Benutzername oder schlechtes Passwort. Ich habe versucht, etwas wie IOException HResult Werte suchen, aber es gab nichts besonderes für die Abbildung IOException HResult mit menschlich lesbaren Fehler (wie diese oder diese). Ich habe auch die Frage hier, die sehr ähnlich, aber es gibt noch keine Lösung zu sehen. Also, wo ist die Dokumentation über IOException HResults Werte Mit Marshal. GetHRForException () Sie wickelten den Windows-Fehlercode in einen HResult Fehlercode. Für eine IOException wird es immer die Windows Fehlernummer 0x80070000 sein. Die 8 bedeutet Fehler, die 7 bedeutet, dass es von Windows kam. Sie könnten einfach amp 0xffff, um den ursprünglichen Fehlercode wieder zu erholen. Konvertieren Sie das Ergebnis zurück in die Dezimalzahl und youll haben viele Orte, um herauszufinden, was der Fehlercode bedeutet. Ich persönlich verwende immer die WinError. h SDK-Header-Datei. Hängt davon ab, welche Version von VS Sie haben, werden die meisten Programmierer finden sie zurück im Verzeichnis C: Programmdateien (x86) Microsoft SDKsWindowsv7.1AInclude. Sie haben auch ein praktisches Dienstprogramm zur Verfügung, run errlook. exe aus der Visual Studio-Eingabeaufforderung. Ein guter Weg, um es leicht verfügbar ist, indem Sie es in das Menü Extras. Verwenden Sie Tools External Tools, Schaltfläche Hinzufügen, Titel Fehlersuche, Befehl C: Programmdateien (x86) Microsoft Visual Studio 12.0Common7Toolserrlook. exe. Tweak der Pfad als notwendig, um Ihre VS-Version entsprechen. Youll jetzt auch feststellen, dass die Fehlercodes nicht die gleichen sind. 0x80070569 amp 0xffff 0x569 1385. Die Suche nach WinError. h für diesen Fehlercode liefert ERRORLOGONTYPENOTGRANTED, Anmeldefehler: dem Benutzer wurde nicht der angeforderte Anmeldetyp an diesem Computer gewährt. Die Art der IOException Fehler können Sie nicht in irgendeiner Weise eingeschränkt werden. Windows hat keine Ausnahmevorgaben, nur die häufigsten Fehlercodes werden in der MSDN-Dokumentation für eine bestimmte winapi-Funktion aufgelistet. Ähnlich wie. NET-Ausnahmen. Ein notwendiges Übel, viele IOException-Fehlercodes werden von Treibern generiert, die nicht von Microsoft geschrieben wurden. Antwortete Sep 9 14 um 8: 57Well, es ist ein bisschen hacky, aber hier gehen wir. Das erste, was zu tun ist, um die HResult aus der Ausnahme zu bekommen. Als ihr ein geschütztes Mitglied, brauchen wir ein wenig Reflexion, um den Wert zu bekommen. Heres eine Erweiterung Methode, um den Trick zu tun: Nun, in Ihrem catch-Bereich, können Sie die HResult: Von hier aus müssen Sie die HResult interpretieren. Du brauchst diesen Link. Wir müssen den ErrorCode, der in den 16 ersten Bits des Wertes gespeichert wird, erhalten, also heres einige Bit-Operation: So testen Sie es mit: Vielleicht gibt es einige höhere Level-Funktionen, um all das Zeug zu bekommen, aber zumindest funktioniert es. Antwortete am 15. Februar 12 um 13:37 1, wie eigentlich (seit. NET 4.5) ist es nicht so unordentlich mehr, weil HResult öffentlich gefördert wurde. Das einzige, was übrig bleibt, ist vielleicht, um den GetProperties-Aufruf in einem statischen Member-Cache zu speichern - das wäre dann ein schöner Wrapper, um einen kompatiblen Wrapper zu haben (vorausgesetzt, Sie verwenden sowohl öffentliche als auch NonPublic-Binding-Flags, die Sie getan haben :-)). Allerdings, angesichts der Ausnahme halding, ist der Leistungsgewinn von einem Cache-Mitglied wahrscheinlich moot. Ndash Christian. K Dec 22 15 at 17:07 Um es perfekt zu reinigen, I39m Casting Exception. HRESult auf meine HResultErrorCodes enum basierend auf unshort, die eindeutig die 0xFFFF-Maske anwendet und entfernt die Notwendigkeit für magische Zahlen oder Konstanten in den aufrufenden Code. Ndash jnm2 Dez 22 15 am 17:16

No comments:

Post a Comment