Как осуществить поиск файла по имени на диске C#?

Приветствую всех, сегодня поговорим о том как осуществить поиск файла по имени в каталогах. Я думаю частенько вам как и мне приходится осуществлять поиск файлов на диске, для разных целей. Варианта поиска на самом деле очень много. Но сегодня хотел показать свой вариант решения этой задачи. Особенностью данного метода, в том что он позволяет минуя системные директории, пропуская их обходить и продолжить осуществление файла. При этом программа не крешится, а продолжает свою работу.

  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 аргумента, директорию с которой он будет вести поиск и имя файла. Путем рекурсии перебираются все подкатологи, потом из последнего каталога в родительский происходит поиск файла заданный пользователем, результаты перебора и найденного файла выводится в консоль.

 

 

Обновлено: 15.10.2018 — 21:20

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.