Цитата:
Сообщение от
MazZzDaI
Можем улучшить приложение совместно - кидайте ChangeRequest в GutHub

На выходе функции "SearchFiles" будет foundFiles со списком файлов найденных в папке(rootDirectory) и ее подпапках согласно заданному критерию поиска (SearchPattern), за исключением папок и файлов с ошибками доступа. В myLogFile будет записан лог с добавленными файлами для изменений и ошибками доступа.
Код:
private List<string> foundFiles = new List<string>();
private void SearchFiles(string myLogFile, string rootDirectory, string SearchPattern) // Search Document at disks by its pattern
{
var Coder = Encoding.GetEncoding(65001);
File.AppendAllText(myLogFile, ";Changing history:\n", Coder);
Stack<string> dirs = new Stack<string>(100);
if (!Directory.Exists(rootDirectory))
{ throw new ArgumentException(); }
dirs.Push(rootDirectory);
while (dirs.Count > 0 )
{
string currentDir = dirs.Pop();
string[] subDirs;
try { subDirs = Directory.GetDirectories(currentDir); }
catch (UnauthorizedAccessException e)
{
File.AppendAllText(myLogFile, "; Wrong Access to the Folder: " + currentDir + " \n", Coder);
continue;
}
catch { continue; }
string[] files = null;
try
{ files = Directory.GetFiles(currentDir); }
catch (UnauthorizedAccessException e)
{
File.AppendAllText(myLogFile, "; Wrong Access to Files in the Folder: " + currentDir + " \n", Coder);
continue;
}
catch { continue; }
foreach (string file in files)
{
try
{
FileInfo fi = new FileInfo(file);
if (fi.FullName.ToString().ToLower().Contains(SearchPattern) == true)
{
File.AppendAllText(myLogFile, fi.FullName + " - add to list\n", Coder);
foundFiles.Add(fi.FullName, Coder);
}
}
catch (FileNotFoundException e)
{
File.AppendAllText(myLogFile, "; The File was deleted" + " \n", Coder);
continue;
}
catch { continue; }
}
foreach (string str in subDirs)
{ dirs.Push(str); }
}
}