Страницы

Поиск по вопросам

понедельник, 13 мая 2019 г.

Отказано в доступе при использовании Directory.GetFiles

Я хочу получить список файлов, которые находятся во вложенных директориях и использую:
Directory.GetFiles(string,string,SearchOption)
Но через какое-то время я получаю ошибку: "Отказано в доступе".
Я посмотрел в дебагере и обнаружил, что Directory.GetFiles натыкается на какие-то скрытые системные папки, которые мне в принципе не нужны.
Можно ли как-нибудь задать игнорирование подобных папок?
Если я оберну все в try/catch, то боюсь, что я не получу нужны мне список.


Ответ

Взял отсюда
private List GetFiles(string path, string pattern) { var files = new List();
try { files.AddRange(Directory.GetFiles(path, pattern, SearchOption.TopDirectoryOnly)); foreach (var directory in Directory.GetDirectories(path)) files.AddRange(GetFiles(directory, pattern)); } catch (UnauthorizedAccessException) { }
return files; }
Функция рекурсивная. При составлении списка файлов будут учитываться обыкновенные папки, а системные не учитываться. Не должно быть такого, что из-за Eхception в конечный результат не войдут обыкновенные файлы.

Console.WriteLine("Started: " + DateTime.Now.ToLongTimeString());
var fileList = GetFiles("c:\\", "*.*");
Console.WriteLine("Finished: " + DateTime.Now.ToLongTimeString()); Console.WriteLine("Files count: " + fileList.Count);
// У меня так: // Started: 12:43:05 // Finished: 12:44:33 // Files count: 427083

Комментариев нет:

Отправить комментарий