Поиск всех папок в С#, не умирая ни в одной, у меня тоже нет доступа

Я хочу найти на жестком диске папки с «StudentPortalNightly», но когда я получаю вместо этого, это исключение, потому что у меня нет доступа ко всем папкам.

List<string> dirs = Directory.GetDirectories( @"C:\" , "StudentPortalNightly", SearchOption.AllDirectories).ToList();

Есть ли способ поиска только в папках, к которым у меня есть законный доступ?

Спасибо

Эрик-


person Eric Brown - Cal    schedule 16.12.2011    source источник
comment
Посмотрите ответ на мой вопрос по этому поводу, ответ сработал отлично - stackoverflow. com/questions/7756626/   -  person Bali C    schedule 16.12.2011
comment
Почему бы вам просто не поймать исключение?   -  person Security Hound    schedule 16.12.2011
comment
@Ramhound, предположительно, потому что это не решит проблему. Ему нужны все папки, к которым у него есть доступ, а не все папки до той, которой у него нет, и ничего после нее.   -  person Craig Stuntz    schedule 16.12.2011
comment
Это сводило меня с ума, пока я не получил этот ответ, всякий раз, когда вы перехватываете исключение, он просто останавливает все перечисление, не похоже, что вы можете перехватывать исключения и возвращаться к перечислению следующего файла.   -  person Bali C    schedule 16.12.2011


Ответы (2)


Снимок экрана из вашего примера кода

List<string> dirs = new List<string>(Directory.GetFiles(@"C:\").ToList());
person MethodMan    schedule 16.12.2011
comment
Я сомневаюсь, что это сработает, как указано выше. Перечисления в файлах по-прежнему будут вызывать исключение. - person Bali C; 16.12.2011
comment
это работает, я только что протестировал его, и он добавит список всех файлов в список с полным путем и именем файла.. если ему не нужны только имена, ему придется удалить путь.. - person MethodMan; 16.12.2011
comment
Возможно, у вас разные разрешения, но я только что попробовал и получил доступ к пути «C:\$Recycle.Bin\S-1-5-21-3836598418-2506196355-976077039-1000\». В любом случае, давайте просто посмотрим, решит ли это OP. - person Bali C; 16.12.2011
comment
c$ - это общий ресурс, есть ли у него разрешение на этот общий ресурс ... попробуйте его на локальном диске, плюс S-1-5 выглядит так, как будто это другой тип папки с учетной записью пользователя, что бы там ни было, просто чтобы получить файлы, приведенный выше код будет работать с ним первоначальный пример не будет работать.. нужно изменить права/разрешения, должна быть причина, по которой у него нет доступа - person MethodMan; 16.12.2011
comment
Я не уверен, какие разрешения у него будут, просто хочу отметить, что c$ не там, где он ищет, он ищет в $Recycle.Bin, это скрытая общая папка? Скорее всего корзина, лол - person Bali C; 16.12.2011
comment
Извините, ребята, я на самом деле выбросил этот подход и закодировал все это вместо того, чтобы пытаться обнаружить. Он находится на очень заблокированном сервере, и я пытался сделать его независимым от того, где он был установлен. Спасибо за попытку. - person Eric Brown - Cal; 19.12.2011
comment
Я попробовал ваше решение с рекурсивным поиском, и он получил ту же самую ошибку... List‹string› dirs = new List‹string›(Directory.GetFiles(@C:\,StudentPortalNightly.exe,SearchOption.AllDirectories) .ToList( )); - person Eric Brown - Cal; 19.12.2011
comment
Мне нужно увидеть точную ошибку ... также вы хотите, чтобы поиск всех файлов, которые я искал, отличался от того, что у вас есть ... вы по какой-то причине передаете StudentPortalNightly.ext ... не знаю, почему ... пожалуйста, уточните - person MethodMan; 19.12.2011

Try-catch будет работать до тех пор, пока вы поймаете правильное исключение. В этом случае вам нужно поймать System.UnauthorizedAccessException

person Chase    schedule 16.12.2011
comment
Смотрите комментарии в исходном вопросе, это не сработает, так как останавливает выполнение, и я не могу возобновить работу со следующей папкой. - person Eric Brown - Cal; 19.12.2011