Показать сообщение отдельно
Старый 14.11.2017, 12:27   #25  
ryik is offline
ryik
Участник
 
2 / 12 (1) ++
Регистрация: 13.11.2017
Адрес: Киев
Цитата:
Сообщение от 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); }
            }
        }