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