// поиск одинаковых fb2-файлов private void bw_DoWork(object sender, DoWorkEventArgs e) { m_dtStart = DateTime.Now; BackgroundWorker worker = sender as BackgroundWorker; ControlPanel.Enabled = false; m_FilesList.Clear(); if (string.IsNullOrEmpty(m_fromXmlPath)) { /* непрерывный поиск */ StatusLabel.Text += "Создание списка файлов для поиска копий fb2 книг...\r"; List <string> lDirList = new List <string>(); // сканировать все подпапки исходной папки m_AllDirs = FilesWorker.recursionDirsSearch(m_SourceDir, ref lDirList, true); m_AllFiles = FilesWorker.makeFilesListFromDirs(ref worker, ref e, ref lDirList, ref m_FilesList, true); // проверка, есть ли хоть один файл в папке для сканирования if (m_AllFiles == 0) { MessageBox.Show("В папке сканирования не найдено ни одного файла!\nРабота прекращена.", m_sMessTitle, MessageBoxButtons.OK, MessageBoxIcon.Information); return; } this.Text += String.Format(": Всего {0} каталогов; {1} файлов", m_AllDirs, m_AllFiles); StatusLabel.Text += String.Format("Осталось проверить {0} книг...\r", m_AllFiles); lDirList.Clear(); } else { /* возобновление поиска */ // загрузка данных из xml StatusLabel.Text += "Возобновление поиска невалидных fb2 книг из xml файла:\r"; StatusLabel.Text += m_fromXmlPath + "\r"; StatusLabel.Text += "Загрузка списка непроверенных книг из xml файла...\r"; XElement xTree = XElement.Load(m_fromXmlPath); //загрузка данных о ходе сравнения XElement xCompareData = xTree.Element("SearchData"); m_AllDirs = Convert.ToInt32(xCompareData.Element("AllDirs").Value); m_AllFiles = Convert.ToInt32(xCompareData.Element("AllFiles").Value); this.Text += String.Format(": Всего {0} каталогов; {1} файлов", m_AllDirs, m_AllFiles); // заполнение списка необработанных файлов IEnumerable <XElement> files = xTree.Element("NotWorkingFiles").Elements("File"); int NotWorkingFiles = files.ToList().Count; StatusLabel.Text += String.Format("Осталось проверить {0} книг...\r", NotWorkingFiles.ToString()); ProgressBar.Maximum = NotWorkingFiles; int i = 0; foreach (XElement element in files) { m_FilesList.Add(element.Value); worker.ReportProgress(i++); } // загрузка из xml-файла в хэш-лист данных о невалидных книгах StatusLabel.Text += "Создание визуального списка невалидных книг из xml файла...\r"; files = xTree.Element("FB2NotValidate").Elements("File"); ProgressBar.Maximum = files.ToList().Count; i = 0; foreach (XElement element in files) { if ((worker.CancellationPending)) { e.Cancel = true; return; } createNotValidateBookItem(element.Value, m_fb2Genres, m_fv2Validator, m_sharpZipLib); worker.ReportProgress(i++); } } ControlPanel.Enabled = true; if ((worker.CancellationPending)) { e.Cancel = true; return; } // Создание списка невалидных fb2-книг searchNotValidateFiles(sender, e, m_FilesList); if (m_autoResizeColumns) { MiscListView.AutoResizeColumns(m_listViewFB2Files); } }
// Обработка файлов private void bw_DoWork(object sender, DoWorkEventArgs e) { ProgressBar.Value = 0; StatusTextBox.Text += "Создание списка файлов для Автокорректировки...\r\n"; foreach (ListViewItemInfo Item in m_ListViewItemInfoList) { if (Item.IsDirListViewItem) { m_SourceDirs.Add(Item.FilePathSource); } else { m_SourceRootFiles.Add(Item.FilePathSource); } } m_NotWorkingFilesList.Clear(); foreach (string dir in m_SourceDirs) { m_AllDirs += FilesWorker.recursionDirsSearch(dir, ref m_DirsList, true); } m_AllFiles = FilesWorker.makeFilesListFromDirs( ref m_bw, ref e, ref m_DirsList, ref m_NotWorkingFilesList, true ); m_NotWorkingFilesList.AddRange(m_SourceRootFiles); m_AllFiles += m_SourceRootFiles.Count; // только теперь добавляем корневой каталог, если в нем выделен / помечен хоть один файл if (m_SourceRootFiles.Count > 0) { m_DirsList.Add(m_SourceRootDir); ++m_AllDirs; } ControlPanel.Enabled = true; if (m_bw.CancellationPending) { e.Cancel = true; return; } // проверка, есть ли хоть один файл в папке для сканирования if (m_AllFiles == 0) { MessageBox.Show( "В папке сканирования не найдено ни одного файла!\r\nРабота прекращена.", m_sMessTitle, MessageBoxButtons.OK, MessageBoxIcon.Information ); return; } ControlPanel.Enabled = true; // Автокорреетировка книг StatusTextBox.Text += "Запуск автокорректировки fb2-файлов...\r\n"; // при пакетной обработке (не прерывать обработку на вылете корректировки, а переходим к обработке следующей книги) BooksAutoCorrectProcessingModeEnum AutoCorrectProcessingMode = (m_NotWorkingFilesList.Count == 1) ? BooksAutoCorrectProcessingModeEnum.OneBookProcessing : BooksAutoCorrectProcessingModeEnum.BatchProcessing; autoCorrect( AutoCorrectProcessingMode, ref m_bw, ref e, ref m_NotWorkingFilesList, ref m_WorkingFilesList, false ); if (m_bw.CancellationPending) { e.Cancel = true; return; } }