Esempio n. 1
0
        private void searchButton_Click(object sender, EventArgs e)
        {
            // Clear the results list
            resultsList.Items.Clear();

            // Get the parameters for  the search thread
            String fileNamesString = fileNameTextBox.Text;

            String[]      fileNames      = fileNamesString.Split(new Char[] { ';' });
            List <String> validFileNames = new List <String>();

            foreach (String fileName in fileNames)
            {
                String trimmedFileName = fileName.Trim();
                if (trimmedFileName != "")
                {
                    validFileNames.Add(trimmedFileName);
                }
            }

            Encoding encoding = Encoding.ASCII;

            SearcherParams pars = new SearcherParams(searchDirTextBox.Text.Trim(), validFileNames, containingTextBox.Text.Trim(), encoding);

            // Start the search thread if it is not already running
            if (Searcher.StartSearch(pars))
            {
            }
            else
            {
                MessageBox.Show("The searcher is already running.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
Esempio n. 2
0
        public void StartSearch()
        {
            bool AllOk = true;

            //попытка доступа к директории - если успешно то все остается неизменным
            try
            {
                parentDirectory.GetDirectories();
            }
            //Если возникло исключение - переменная  AllOk получает значение false
            catch
            {
                AllOk = false;
            }
            //Если доступ был успешным то получаем подкаталоги
            if (AllOk)
            {
                if (parentDirectory.GetDirectories().Length != 0)
                {
                    //Для каждого подкаталога запускаем новый поиск
                    foreach (DirectoryInfo di in parentDirectory.GetDirectories())
                    {
                        Searcher second = new Searcher(di, fileName, crTimeBeg, crTimeEnd, sizeInKbBegin, sizeInKbEnd);
                        second.StartSearch();
                        //Получаем список файлов удовлетворяющих условия для подкаталога
                        this.FindedFiles.AddRange(second.FindedFiles);
                    }
                    //Находим файлы удовлетворяющие условия в самом каталоге
                    this.SearchFile(parentDirectory);
                }
                else
                {
                    //Если подкаталогов нет просто ищем файлы в текущем
                    this.FindedFiles.AddRange(this.SearchFile(this.parentDirectory));
                }
            }
        }
Esempio n. 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";
                }
            }
        }