Intereting Posts
LINQ: из списка типа T извлекают только объекты определенного подclassа S Добавление библиотеки .NET Framework DLL в качестве ссылки на приложение для магазина Windows с открытым исходным кодом, факсимированный поиск / управляемая навигация для сайтов электронной коммерции с .net apis Увеличить масштаб диаграммы понижающей дискретизации Как опубликовать приложение Windows Forms? JSON.net – поле является либо строковым, либо List Чтобы заставить пользователя войти в систему со своей учетной записью организации Google (G Suite) в mvc c # Почему XmlWriter всегда выводит кодировку utf-16? C #: использование неназначенной локальной переменной с использованием foreach и if Как я могу распечатать входные данные пользователя на C #? Хэш шифрование пароля при вставке в базу данных Запустите exe из браузера (Windows) как установить contol свойство в asp.net Странная проблема с datagridview и tabcontrol C # WPF Binding Combox с различными List и different SelectedValue

Как игнорировать «Доступ к пути запрещен» / UnauthorizedAccess Exception в C #?

Как обходить / игнорировать «Доступ к пути запрещен» / Исключение UnauthorizedAccess

и продолжать собирать имена файлов в этом методе;

public static string[] GetFilesAndFoldersCMethod(string path) { string[] filenames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Select(Path.GetFullPath).ToArray(); return filenames; } 

// Вызов … …

 foreach (var s in GetFilesAndFoldersCMethod(@"C:/")) { Console.WriteLine(s); } 

Мое приложение останавливается на первой строке GetFilesAndFoldersCMethod, и исключение говорит; Msgstr “Доступ к пути” C: \ @ Logs \ “запрещен.”. Пожалуйста, помогите мне…

Спасибо,

Лучший способ сделать это – добавить блок Try / Catch для обработки исключения …

 try { string[] filenames = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories).Select(Path.GetFullPath).ToArray(); return filenames; } catch (Exception ex) { //Do something when you dont have access return null;//if you return null remember to handle it in calling code } 

вы также можете специально обрабатывать UnauthorizedAccessException, если вы выполняете другой код в этой функции, и вы хотите убедиться, что это исключение доступа, которое приводит к сбою (это исключение выбрано функцией Directory.GetFiles ) …

 try { //... } catch(UnauthorizedAccessException ex) { //User cannot access directory } catch(Exception ex) { //a different exception } 

EDIT : Как указано в комментариях ниже, вы видите, что вы выполняете рекурсивный поиск с помощью вызова функции GetFiles. Если вы хотите, чтобы это обходилось без ошибок и продолжалось, вам нужно будет написать свою собственную рекурсивную функцию. Здесь есть отличный пример, который будет делать то, что вам нужно. Вот модификация, которая должна быть именно то, что вам нужно …

 List DirSearch(string sDir) { List files = new List(); try { foreach (string f in Directory.GetFiles(sDir)) { files.Add(f); } foreach (string d in Directory.GetDirectories(sDir)) { files.AddRange(DirSearch(d)); } } catch (System.Exception excpt) { Console.WriteLine(excpt.Message); } return files; } 

Взгляните на эту статью в руководстве по программированию c #:

Практическое руководство. Итерация через дерево каталогов (руководство по программированию на C #)

Основываясь на странице MS и различных попытках здесь, в stackoverflow, у меня есть решение, которое работает, и избегает всех исключений GetFiles () / GetDirectories ().

cf https://stackoverflow.com/a/10728792/89584

(первоначальный вопрос можно считать дубликатом этого или наоборот).