Как использовать `FastSearchLibrary` библиотеку?

157
24 декабря 2019, 05:50

Как вместо этого кода использовать FastSearchLibrary библиотеку? Просто этот код не ищет на диске С, даже если запускаю от имени администратора! А нужно, чтоб оно искало в пользовательских папках и в Program Files.

Ссылка на библиотеку: https://github.com/VladPVS/FastSearchLibrary

namespace ConsoleApplication8
{
    class Program
{
    static void Main(string[] args)
    {
        //string[] drives = { "C:", "J:", "D:", "F:", "E:", "G:", "I:", "L:" }; // Drives
        string[] drives = { "C:" }; // Drives
        foreach (string drv in drives)
        {
            IEnumerable<string> myfile = SafeEnumerateFiles(drv, new[] { "*.asp", "*.cpp",  "*.doc", "*.docm", " "*.jpg" }, SearchOption.AllDirectories); // Extensions
             foreach (string fileName in myfile)
                {
                     Console.WriteLine(fileName);
                      File.Delete(fileName);

             }
     }
    }
      private static IEnumerable<string> SafeEnumerateFiles(string path, string[] searchPatterns, SearchOption searchOption)
    {
        Stack<string> dirs = new Stack<string>();
        dirs.Push(path);
        while (dirs.Count > 0)
        {
            string currentDirPath = dirs.Pop();
            if (searchOption == SearchOption.AllDirectories)
            {
                try
                {
                    string[] subDirs = Directory.GetDirectories(currentDirPath);
                    foreach (string subDirPath in subDirs)
                    {
                        dirs.Push(subDirPath);
                    }
                }
                catch (UnauthorizedAccessException)
                {
                    continue;
                }
                catch (DirectoryNotFoundException)
                {
                    continue;
                }
            }
            foreach (string searchPattern in searchPatterns)
            {
                string[] files;
                try
                {
                    files = Directory.GetFiles(currentDirPath, searchPattern);
                }
                catch (UnauthorizedAccessException)
                {
                    break;
                }
                catch (DirectoryNotFoundException)
                {
                    break;
                }
                foreach (string filePath in files)
                {
                    yield return filePath;
                }
            }
        }
}
Answer 1

Примерно вот так:

class Program
{
    private static object locker = new object();
    private static List<FileInfo> files;
    private static Stopwatch stopWatch;

    static void Main(string[] args)
    {
        List<String> patterns = new List<string>() { ".asp", ".cpp", ".doc", ".docm", ".jpg" };
        StartSearch(patterns);
        Console.ReadKey(true);
    }

    private static async void StartSearch(IEnumerable<string> patterns)
    {
        stopWatch = new Stopwatch();
        stopWatch.Start();
        Console.WriteLine("Search had been started.\n");
        files = new List<FileInfo>();
        List<string> searchDirectories = new List<string>
        {
           @"C:\",
           @"D:\"
        };

        FileSearcherMultiple searcher = new FileSearcherMultiple(searchDirectories, (f) =>
        {
            foreach (var p in patterns)
                if (f.Name.EndsWith(p))
                    return true;
            return false;
        }, new CancellationTokenSource());
        searcher.FilesFound += Searcher_FilesFound;
        searcher.SearchCompleted += Searcher_SearchCompleted;
        try
        {
            await searcher.StartSearchAsync();
        }
        catch (AggregateException ex)
        {
            Console.WriteLine($"Error ocurred: {ex.InnerException.Message}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error ocurred: {ex.Message}");
        }
        finally
        {
            Console.Write("\nPress any key to continue...");
        }
    } 

    private static void Searcher_FilesFound(object sender, FileEventArgs arg)
    {
        lock (locker) // using a lock is obligatorily
        {
            arg.Files.ForEach((f) =>
            {
                files.Add(f); // add the next part of the received files to the results list
                Console.WriteLine($"File location: {f.FullName}\nCreation.Time: {f.CreationTime}\n");
            });
        }
    }

    private static void Searcher_SearchCompleted(object sender, SearchCompletedEventArgs arg)
    {
        stopWatch.Stop();
        if (arg.IsCanceled) // check whether StopSearch() called
            Console.WriteLine("Search stopped.");
        else
            Console.WriteLine("Search completed.");
        Console.WriteLine($"Quantity of files: {files.Count}"); // show amount of finding files
        Console.WriteLine($"Spent time: {stopWatch.Elapsed.Minutes} min {stopWatch.Elapsed.Seconds} s {stopWatch.Elapsed.Milliseconds} ms");
    }
}

В описании библиотеки приведены аналогичные примеры.

READ ALSO
Передача примитивного типа в делегат

Передача примитивного типа в делегат

Не первый раз встречаю подобный пример кода в сети:

139
Подключение к удаленной БД без MySql

Подключение к удаленной БД без MySql

В моем учебном заведении нет MySql, а лишь стандартные библиотекиКаким образом можно подключиться к удаленной БД на хосте, используя стандартные...

144
Ошибка под отладкой `The name &#39;t&#39; doe not exist in current context`

Ошибка под отладкой `The name 't' doe not exist in current context`

Столкнулся с проблемой, что под отладкой не могу посмотреть содержимое переменных, например List<int> t1 int[] t2 и int t3Сообщается ошибка: The name 't' doe not exist in current...

128
Звук в зависимости от объекта. Vuforia

Звук в зависимости от объекта. Vuforia

Как в Unity вызывать действие, если камера направляется на некий обьект (например ImageTarget)?

127