Exception provoquée par la méthode Directory.GetFiles en raison de restrictions d'accès
Lorsque vous accédez à un système de fichiers réseau ou à un système de fichiers dans un environnement contrôlé, vous pouvez rencontrer un accès restreint à certains dossiers. Cela amène des méthodes telles que Directory.GetFiles à lever des exceptions, interrompant l'exécution du programme.
Analyse du problème
Lorsque la méthode Directory.GetFiles rencontre un répertoire inaccessible, elle lèvera une exception UnauthorizedAccessException. Malheureusement, avant de détecter cette exception, la méthode a échoué et ne peut pas récupérer.
Solution : Détecter les répertoires un par un
Pour résoudre ce problème, il est recommandé de sonder un répertoire à la fois au lieu de rechercher de manière récursive dans toute l'arborescence des répertoires. De cette façon, vous pouvez intercepter et gérer les exceptions répertoire par répertoire, évitant ainsi l’arrêt prématuré du programme.
Exemple de mise en œuvre
Ce qui suit est un exemple de méthode qui parcourt une arborescence de répertoires et ajoute des chemins de fichiers à une liste, en excluant les fichiers des répertoires à accès refusé :
<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>
Cette méthode garantit que le programme continue son exécution même s'il rencontre un répertoire auquel il n'a pas accès, vous permettant de traiter des fichiers dans un répertoire auquel il a accès. Cette version améliorée évite l'utilisation de ToList().ForEach()
et utilise une boucle foreach
plus claire et plus lisible, améliorant la maintenabilité du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!