Exemple #1
0
        public static void StartSearch(SearchArguments arguments)
        {
            lock (searchLockObject)
            {
                if (state != SearchState.Ready)
                {
                    return;
                }

                state = SearchState.Running;
                if (StateChanged != null)
                {
                    StateChanged(state, Transition.Started);
                }
            }

            lastSearchThread = new Thread(delegate()
            {
                Search(arguments);
                SearchState stoppingState = state;
                state = SearchState.Ready;
                if (StateChanged != null)
                {
                    StateChanged(state, stoppingState == SearchState.Stopping ? Transition.Cancelled : Transition.Complete);
                }
            });
            lastSearchThread.IsBackground = true;
            lastSearchThread.Start();
        }
Exemple #2
0
 private static void Search(SearchArguments arguments)
 {
     try
     {
         Search(new DirectoryInfo(arguments.Folder), arguments);
     }
     catch (Exception ex)
     {
         state = SearchState.Stopping;
         if (SearchError != null)
         {
             SearchError(ex);
         }
     }
 }
Exemple #3
0
        private static void Search(DirectoryInfo dir, SearchArguments arguments)
        {
            if (state != SearchState.Running)
            {
                return;
            }

            if (SearchProgressed != null)
            {
                SearchProgressed(dir.FullName);
            }

            try
            {
                FileInfo[] files = dir.GetFiles(arguments.NameSearch);

                foreach (FileInfo file in files)
                {
                    if (state != SearchState.Running)
                    {
                        return;
                    }

                    if (string.IsNullOrEmpty(arguments.ContentSearch))
                    {
                        if (ResultFound != null)
                        {
                            ResultFound(new SearchResult(file.FullName));
                        }

                        continue;
                    }
                    else
                    {
                        try
                        {
                            string contentSearch = arguments.ContentSearch.ToLower();
                            using (StreamReader sire = new StreamReader(file.FullName))
                            {
                                for (string line = sire.ReadLine();
                                     line != null;
                                     line = sire.ReadLine())
                                {
                                    if (state != SearchState.Running)
                                    {
                                        return;
                                    }

                                    if (line.ToLower().Contains(contentSearch))
                                    {
                                        if (ResultFound != null)
                                        {
                                            ResultFound(new SearchResult(file.FullName));
                                        }

                                        break;
                                    }
                                }
                            }
                        }
                        catch (IOException) { }
                    }
                }

                DirectoryInfo[] subDirs = dir.GetDirectories();
                foreach (DirectoryInfo subDir in subDirs)
                {
                    Search(subDir, arguments);
                }
            }
            catch (UnauthorizedAccessException)
            {
                return;
            }
        }