Ich habe eine Anwendung erstellt, die nach einigen Dateien in einigen Verzeichnissen sucht. Wenn ein Verzeichnis nicht vorhanden ist, wird DirectoryNotFoundException
ausgegeben. Ich fange diese Ausnahme, aber es hat keine DirectoryName
-Eigenschaft oder etwas ähnliches wie die FileNotFoundException
(FileName). Wie kann ich den Verzeichnisnamen aus den Ausnahmeeigenschaften finden?
Es sieht wie ein Hack aus, aber Sie können den Pfad aus Message
property extrahieren. Was mich betrifft, würde ich lieber zuerst die Existenz des Verzeichnisses checken mit Directory.Exists
Methode.
Es ist etwas inkonsistent, dass FileNotFoundException
den Dateinamen hat, aber DirectoryNotFoundException
hat nicht den Verzeichnisnamen, oder?
Hier ist eine Umgehung: Bevor Sie die Ausnahme auslösen, ordnen Sie den Namen des fehlgeschlagenen Verzeichnisses mithilfe der Data
-Eigenschaft von Exception zu.
Speichern Sie unmittelbar vor dem Versuch, Dateien in einem Verzeichnis zu finden, den Namen des Verzeichnisses in einer Variablen. Dann beginne einen try-Block für den Code, der in diesem Verzeichnis aussieht. Sie haben nun den Verzeichnisnamen verfügbar, falls dieser Block Code werfen sollte.
Zum Beispiel:
%Vor%Wenn Sie nur versuchen, diesen einen Fehler in Ihrer IDE zu stampfen, können Sie Folgendes versuchen:
Wechseln Sie in Visual Studio zu Debug -> Exceptions
und aktivieren Sie das Kontrollkästchen Thrown
für Common Language Runtime Exceptions
. Dies führt Sie direkt zu einer Ausnahme, wenn es passiert, anstatt zu warten, um erwischt zu werden.
Es tut uns leid, einen alten Post zu finden, aber wie andere gesagt haben, ist es ziemlich dumm, dass DirectoryNotFoundException das Verzeichnis nicht als Eigenschaft hat, wenn FileNotFoundException das tut.
Ich habe es als Feature-Anforderung für .NET:
Das Format des Message-Members der DirectoryNotFoundException, das von den meisten Directory-Klassenmethoden ausgelöst wird, lautet "Directory 'input' not found.". Es sollte nicht schwer sein, die Eingabe aus dieser Zeichenfolge zu extrahieren.
Frage: Warum brauchen Sie den Eingabeparameter von der Ausnahme, wenn Sie die Methode mit genau diesem Parameter aufgerufen haben?