Gérer avec élégance les problèmes d'autorisation de fichiers et de dossiers dans Directory.GetFiles()
Lorsque vous utilisez Directory.GetFiles()
pour énumérer des fichiers dans un répertoire, vous pouvez rencontrer des obstacles si vous rencontrez un dossier ou un fichier protégé. Cela peut entraîner l'arrêt soudain du processus de listage des fichiers, à l'exception d'une exception. Mais que se passe-t-il si vous souhaitez ignorer ces restrictions et continuer à parcourir les fichiers accessibles ?
La clé est d'abandonner les AllDirectories
paramètres et de gérer la récursivité manuellement. En vérifiant chaque sous-répertoire individuellement, vous pouvez avoir un contrôle plus granulaire sur le processus.
Considérez l'extrait de code suivant :
<code class="language-csharp">using System; using System.IO; static class Program { static void Main() { string path = ""; // TODO ApplyAllFiles(path, ProcessFile); } static void ProcessFile(string path) {/* ... */} static void ApplyAllFiles(string folder, Action<string> fileAction) { try { foreach (string file in Directory.GetFiles(folder)) { fileAction(file); } } catch (UnauthorizedAccessException) { // 处理异常 } catch (Exception ex) { // 处理其他异常 } foreach (string subDir in Directory.GetDirectories(folder)) { try { ApplyAllFiles(subDir, fileAction); } catch (UnauthorizedAccessException) { // 处理异常,例如记录错误信息或忽略 } catch (Exception ex) { // 处理其他潜在异常 } } } }</code>
Dans ce code, nous utilisons un délégué (Action<string>
) pour préciser l'action à effectuer sur chaque fichier trouvé. La méthode ApplyAllFiles()
explore récursivement les sous-répertoires, capturant n'importe quel UnauthorizedAccessException
et poursuivant son exploration.
En gérant manuellement la récursivité, vous pouvez contourner efficacement les dossiers ou fichiers inaccessibles, garantissant que seuls les éléments autorisés sont traités sans interrompre les opérations de votre liste de fichiers. Le code amélioré gère également les exceptions pour Directory.GetFiles
afin de garantir un programme plus robuste.
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!