Лучший способ сделать это, чтобы добавить Try/Catch block обработать исключение ...
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. Если вы хотите, чтобы это обходилось без ошибок и продолжалось, вам нужно будет написать свою собственную рекурсивную функцию. There is a great example here, который будет делать то, что вам нужно. Вот модификация, которая должна быть именно то, что вам нужно ...
List<string> DirSearch(string sDir)
{
List<string> files = new List<string>();
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;
}
Не выглядит так, как будто вы можете запросить, чтобы этот метод продолжал перечисляться, когда он сталкивается с ошибкой. Я думаю, вам придется перевернуть свой собственный счетчик или найти другой класс, который будет более гибким. –