Поиск файлов по маске с игнорированием закрытых для доступа папок - C#
Формулировка задачи:
Привет. Написал вот так, а оно доходит до папки system volume information и ошибка - Отказано в доступе по пути "d:\System Volume Information". Как это можно поправить?
Код:
Перенес код на форму. Вот только есть проблема, как вывести названия файлов в listbox? Пробовал так, не то. :
DirectoryInfo dir = new DirectoryInfo(@"d:\"); foreach (FileInfo file in dir.GetFiles("*.exe", SearchOption.AllDirectories)) { listBox1.Items.Add(file.DirectoryName + file.Name); }
нашел в сети:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication1 { public class Find { public void FindInDir(DirectoryInfo dir, string pattern, bool recursive) { try { foreach (FileInfo file in dir.GetFiles(pattern)) { Console.Out.WriteLine(file.FullName); } } catch (UnauthorizedAccessException) { } if (recursive) { DirectoryInfo[] subdir = dir.GetDirectories(); int i; int l = subdir.Length; for (i = 1; i < l; i++) { try { this.FindInDir(subdir[i], pattern, recursive); } catch (UnauthorizedAccessException) { Console.Out.WriteLine("Отказанно в доступе " + subdir[i].Name); } } } } public void FindFiles(string dir, string pattern) { this.FindInDir(new DirectoryInfo(dir), pattern, true); } } class Program { static void Main(string[] args) { //проверка указанного каталога, чтобы исключить ошибку доступа в самом начале string a = @"Z:\"; DirectoryInfo b = new DirectoryInfo(a); try { DirectoryInfo[] test = b.GetDirectories(); } catch (UnauthorizedAccessException) { Console.Out.WriteLine("В поиске отказанно директория не доступна\nPress any key"); Console.ReadKey(); Environment.Exit(0); } Find f = new Find(); f.FindFiles(a, "*.avi"); Console.Out.WriteLine("Press any key"); Console.ReadKey(); } } }
Find f = new Find(); f.FindFiles(a, "*.avi"); listBox1.Items.Add(f);
Код скопирован со стороннего форума.
Автор кода:
SL@y
(Примечание Памирыч)Решение задачи: «Поиск файлов по маске с игнорированием закрытых для доступа папок»
textual
Листинг программы
bool FindFiles(string path, string pattern, StringCollection listFiles) { string []fileNames=Directory.GetFiles(path, pattern, SearchOption.TopDirectoryOnly); fileNames.All(x => AddFileNameInListFiles(x, listFiles)); return true; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д