Énumération des fichiers lors d’une exception

J’essaie d’énumérer les fichiers de mon ordinateur à l’aide du code ci-dessous, mais chaque fois qu’il s’affiche, un fichier ou un répertoire que je n’ai pas l’autorisation de lire génère une exception. Est-il possible de poursuivre la recherche après la levée de l’exception? Je sais que certaines personnes ont eu des problèmes similaires, mais existe-t-il un autre moyen de le faire, autrement que de vérifier chaque fichier / dossier individuellement?

try { ssortingng[] files = Directory.GetFiles(@"C:\", "*.*",SearchOption.AllDirectories); foreach (ssortingng file in files) { Console.WriteLine(file); } } catch { } 

Merci pour toute aide car cela me rend fou!

J’ai rencontré le même problème aujourd’hui. J’ai piraté le code suivant. Si vous souhaitez l’utiliser dans un produit réel, vous devrez peut-être améliorer la gestion des erreurs. Comme c’était pour un scénario à tir unique, je m’en fichais beaucoup.

 static IEnumerable EnumerateFilesRecursive(ssortingng root,ssortingng pattern="*") { var todo = new Queue(); todo.Enqueue(root); while (todo.Count > 0) { ssortingng dir = todo.Dequeue(); ssortingng[] subdirs = new ssortingng[0]; ssortingng[] files = new ssortingng[0]; try { subdirs = Directory.GetDirectories(dir); files = Directory.GetFiles(dir, pattern); } catch (IOException) { } catch (System.UnauthorizedAccessException) { } foreach (ssortingng subdir in subdirs) { todo.Enqueue(subdir); } foreach (ssortingng filename in files) { yield return filename; } } } 

Pour l’utiliser, vous pouvez soit:

 ssortingng[] files = EnumerateFilesRecursive(@"C:\").ToArray();//Note the ToArray() foreach (ssortingng file in files) { Console.WriteLine(file); } 

qui énumère d’abord tous les fichiers, stocke tous les noms de fichiers en mémoire et les affiche ensuite seulement. Sinon, vous pouvez:

 IEnumerable files = EnumerateFilesRecursive(@"C:\");//Note that there is NO ToArray() foreach (ssortingng file in files) { Console.WriteLine(file); } 

Qui écrit en énumérant et n’a donc pas besoin de garder tous les noms de fichiers en mémoire en même temps.