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