Exemple #1
0
        static void Main(string[] args)
        {
            try
            {
                Searcher searcher = new Searcher("*.txt");
                searcher.DoSearch();

                while (!searcher.IsCompleted) { };

                Console.WriteLine("Files count: {0}", searcher.FileCount);
            }
            catch (Exception e)
            {
                Console.WriteLine("Error has occured: {0}", e.Message);
            }
            catch
            {
                Console.WriteLine("Unknowne error has occured.");
            }
        }
Exemple #2
0
 private void stopButton_Click(object sender, EventArgs e)
 {
     // Stop the search thread if it is running:
     Searcher.Stop();
 }
Exemple #3
0
        //Метод класса Form2 который реализует многопоточность
        private void DoItParalell(DirectoryInfo di)
        {
            //если в директории есть вложенные папки выполнится следующий код
            if (di.GetDirectories().Length != 0)
            {
                //создадим новый список екземпляров поискового класса
                Searchers = new List <Searcher>();
                //создадим новый список потоков
                Threads = new List <Thread>();

                //для каждой папки в корневой выполним создание поискового класса и потока
                foreach (DirectoryInfo subdir in di.GetDirectories())
                {
                    Searcher s1 = new Searcher(subdir, this.FileName, this.BegDate, this.EndDate, this.MinSize, this.MaxSize);
                    this.Searchers.Add(s1);
                    Thread t1 = new Thread(new ThreadStart(s1.StartSearch));
                    this.Threads.Add(t1);
                }
                //запускаем потоки на выполнение
                foreach (Thread item in this.Threads)
                {
                    item.Start();
                }
                //ждем завершения работы всех потоков
                while (true)
                {
                    int endCount = 0;
                    foreach (Thread item in this.Threads)
                    {
                        //проверка состояния потока
                        if (item.ThreadState == ThreadState.Running)
                        {
                            endCount++;
                        }
                    }
                    //если вторичных потоков больше нет основной поток продолжает работу
                    if (endCount == 0)
                    {
                        break;
                    }
                }

                int counter = 0;

                //Для каждого поискового класса читаем список найденных файлов
                foreach (Searcher si in Searchers)
                {
                    //Добавляем информацию про каждый полученный файл в список на форме
                    foreach (FileInfo fi in si.FindedFiles)
                    {
                        this.listView1.Items.Add(fi.Name);
                        this.listView1.Items[counter].SubItems.Add(fi.DirectoryName);
                        this.listView1.Items[counter].SubItems.Add((fi.Length / 1000).ToString());
                        this.listView1.Items[counter].SubItems.Add(fi.CreationTime.ToString());
                        counter++;
                    }
                }
                //Создаем екземпляр поискового класса для поиска в корен дисков/входных директорий
                Searcher ls = new Searcher(di, this.FileName, this.BegDate, this.EndDate, this.MinSize, this.MaxSize);
                //Ищем файлы только внутри корневой директории
                List <FileInfo> localsFile = ls.SearchFile(di);
                //Добавляем найденные файлы в визуальный список на форме
                foreach (FileInfo fi in localsFile)
                {
                    this.listView1.Items.Add(fi.Name);
                    this.listView1.Items[counter].SubItems.Add(fi.DirectoryName);
                    this.listView1.Items[counter].SubItems.Add((fi.Length / 10).ToString());
                    this.listView1.Items[counter].SubItems.Add(fi.CreationTime.ToString());
                    counter++;
                }
                //Выводим сообщение о количестве отысканных файлов
                this.lbProgress.Text = "Done!" + " Finded " + listView1.Items.Count + " files.";

                //Если файлов в поисковых классах не обнаружено в метку на форме
                //выводится сообщение "File not found"
                if (counter == 0)
                {
                    this.lbProgress.Text = "File not found";
                }
            }
            else
            {
                //Создается единый екземпляр класс Searcher
                Searcher singleSearch = new Searcher(di, this.FileName, this.BegDate, this.EndDate, this.MinSize, this.MaxSize);
                //Проводится поиск в одном потоке
                singleSearch.StartSearch();
                int counter = 0;
                //Получаем все отысканные файлы и выводим в список на форме
                foreach (FileInfo fi in singleSearch.FindedFiles)
                {
                    this.listView1.Items.Add(fi.Name);
                    this.listView1.Items[counter].SubItems.Add(fi.DirectoryName);
                    this.listView1.Items[counter].SubItems.Add((fi.Length / 100).ToString());
                    this.listView1.Items[counter].SubItems.Add(fi.CreationTime.ToString());
                    counter++;
                    this.lbProgress.Text = "Done!";
                }
                //Если файлы не найдены - выводим сообщение
                if (counter == 0)
                {
                    this.lbProgress.Text = "File not found";
                }
            }
        }
Exemple #4
0
 private void stopButton_Click(object sender, EventArgs e)
 {
     Searcher.Stop();
 }