Ausnahme durch die Directory.GetFiles-Methode aufgrund von Zugriffsbeschränkungen
Beim Zugriff auf ein Netzwerkdateisystem oder ein Dateisystem in einer kontrollierten Umgebung kann es zu eingeschränktem Zugriff auf bestimmte Ordner kommen. Dies führt dazu, dass Methoden wie Directory.GetFiles Ausnahmen auslösen und die Programmausführung unterbrechen.
Problemanalyse
Wenn die Directory.GetFiles-Methode auf ein Verzeichnis trifft, auf das nicht zugegriffen werden kann, löst sie eine UnauthorizedAccessException-Ausnahme aus. Leider ist die Methode vor dem Abfangen dieser Ausnahme fehlgeschlagen und kann nicht wiederhergestellt werden.
Lösung: Verzeichnisse einzeln erkennen
Um dieses Problem zu lösen, wird empfohlen, jeweils ein Verzeichnis zu untersuchen, anstatt den gesamten Verzeichnisbaum rekursiv zu durchsuchen. Auf diese Weise können Sie Ausnahmen pro Verzeichnis abfangen und behandeln und so eine vorzeitige Programmbeendigung vermeiden.
Beispielimplementierung
Das Folgende ist eine Beispielmethode, die einen Verzeichnisbaum durchläuft und Dateipfade zu einer Liste hinzufügt, wobei Dateien aus Verzeichnissen mit verweigertem Zugriff ausgeschlossen werden:
<code class="language-csharp">private static void AddFiles(string path, IList<string> files) { try { foreach (string file in Directory.GetFiles(path)) { files.Add(file); } foreach (string subdirectory in Directory.GetDirectories(path)) { AddFiles(subdirectory, files); } } catch (UnauthorizedAccessException ex) { // 忽略无法访问的目录,继续处理其他目录 } }</code>
Diese Methode stellt sicher, dass das Programm auch dann weiter ausgeführt wird, wenn es auf ein Verzeichnis trifft, auf das es keinen Zugriff hat, sodass Sie Dateien in einem Verzeichnis verarbeiten können, auf das Zugriff besteht. Diese verbesserte Version vermeidet die Verwendung von ToList().ForEach()
und verwendet eine klarere und besser lesbare foreach
-Schleife, wodurch die Wartbarkeit des Codes verbessert wird.
Das obige ist der detaillierte Inhalt vonWie kann ich mit UnauthorizedAccessException umgehen, wenn ich Directory.GetFiles verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!