Приветствую всех, сегодня поговорим о том как осуществить поиск файла по имени в каталогах. Я думаю частенько вам как и мне приходится осуществлять поиск файлов на диске, для разных целей. Варианта поиска на самом деле очень много. Но сегодня хотел показать свой вариант решения этой задачи. Особенностью данного метода, в том что он позволяет минуя системные директории, пропуская их обходить и продолжить осуществление файла. При этом программа не крешится, а продолжает свою работу.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
static void Main(string[] args) { Find("D:\\", "text.txt"); //вызов метода Console.ReadKey(); } static int top = 4; //переменная хранить позицию ряда public static void Find(string pathDir, string file) { DirectoryInfo d; try { d = new DirectoryInfo(pathDir); DirectoryInfo[] w = d.GetDirectories(); //подкаталоги foreach (var item1 in w) { //проверка на системную директорию, если системная пропускаем if (item1.Attributes.Equals(FileAttributes.System | FileAttributes.Hidden | FileAttributes.Directory)) { continue; //выходим из цикла } Find(item1.FullName, file); //Рекурсия } //получаем коллекцию всех файлов в директории string[] arrFile = Directory.EnumerateFiles(d.FullName).ToArray(); for (int n = 0; n < arrFile.Length; n++) { Console.SetCursorPosition(0, 0); var ew = Path.GetFileName(arrFile[n]); Console.SetCursorPosition(0, 0); //тут мы возвращаем каретку на позицию начала строки Console.WriteLine(new string(' ', 200));//затираем предложения Console.SetCursorPosition(0, 0); Console.WriteLine(ew); if (ew.Equals(file)) { Console.SetCursorPosition(0, top);//устанавливаем каретку в начало и по значению top Console.WriteLine(new string('-', 100));//разделяем строки Console.WriteLine("Фаил найден!"); Console.WriteLine(arrFile[n]); Console.WriteLine(new string('-', 100)); top += 5;//увеличиваем tоp } } } catch (Exception) { return; } } |
Почти все строки были закомменчены и проблем не должно возникнуть. Рассмотрим программу, есть метод Find который принимает 2 аргумента, директорию с которой он будет вести поиск и имя файла. Путем рекурсии перебираются все подкатологи, потом из последнего каталога в родительский происходит поиск файла заданный пользователем, результаты перебора и найденного файла выводится в консоль.