/// <summary> /// Автокорректировка списка файлов /// </summary> /// <param name="AutoCorrectProcessingMode">Режим обработки книг: обработка одной книги или пакетный режим</param> /// <param name="bw">Экземпляр класса BackgroundWorker по ссылке</param> /// <param name="e">Экземпляр класса DoWorkEventArgs по ссылке</param> /// <param name="NotWorkingFilesList">Список необработанных книг</param> /// <param name="WorkingFilesList">Список обработанных книг</param> /// <param name="IsReNew">Признак возобновления из файла корректировки</param> private void autoCorrect(BooksAutoCorrectProcessingModeEnum AutoCorrectProcessingMode, ref BackgroundWorker bw, ref DoWorkEventArgs e, ref List <string> NotWorkingFilesList, ref List <string> WorkingFilesList, bool IsReNew = false) { this.Text = string.Format("Автокорректировка {0} книг в {1} каталогах", m_AllFiles, m_AllDirs); if (IsReNew) { this.Text += string.Format(" / Для обработки {0} файлов", m_NotWorkingFilesList.Count); } string Title = this.Text; ProgressBar.Maximum = NotWorkingFilesList.Count; ProgressBar.Value = 0; int i = 0; foreach (string file in NotWorkingFilesList) { if (bw.CancellationPending) { // удаление обработанные книги (файлы) из списка всех файлов removeFinishedFilesInFilesList(ref NotWorkingFilesList, ref m_WorkingFilesList); e.Cancel = true; return; } // обработка файла this.Text = string.Format("{0} : {1} / {2}", Title, i + 1, NotWorkingFilesList.Count); DateTime dtStart = DateTime.Now; StatusTextBox.Text += string.Format(@"{0} => ( {1} ) =>", file, getFileLength(file)); WorksWithBooks.autoCorrect(AutoCorrectProcessingMode, file, m_sharpZipLib, m_fv2Validator); // повторная проверка откорректированной книги на валидность if (checkBoxValidate.Checked) { bool IsValid = string.IsNullOrWhiteSpace(m_fv2Validator.ValidatingFB2File(file)); StatusTextBox.Text += string.Format(" {0} |", IsValid ? "Валидный" : "Невалидный"); } DateTime dtEnd = DateTime.Now; string sTime = dtEnd.Subtract(dtStart).ToString(); try { sTime = sTime.Substring(0, 11); } catch (Exception ex) { Debug.DebugMessage( file, ex, "Автокорректировка списка файлов: AutoCorrector.AutoCorrectorForm.autoCorrect(): Получение времени конца обработки файла." ); } sTime += " (ч:м:с.мс)"; StatusTextBox.Text += string.Format(" {0}", sTime) + "\r\n"; // обработанные файлы m_WorkingFilesList.Add(NotWorkingFilesList[i]); m_bw.ReportProgress(++i); ProgressBar.Update(); } // удаление из списка всех файлов обработанные книги (файлы) removeFinishedFilesInFilesList(ref NotWorkingFilesList, ref WorkingFilesList); }
// Обработка файлов 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; } }
// Обработка файлов private void bw_DoWork(object sender, DoWorkEventArgs e) { ProgressBar.Value = 0; int i = 0; FB2Validator fv2Validator = new FB2Validator(); switch (m_WorkMode) { case BooksAutoCorrectModeEnum.SelectedBooks: this.Text = string.Format( "Автокорректировка выделенных {0} книг", m_listViewFB2Files.SelectedItems.Count ); // при пакетной обработке (не прерывать обработку на вылете корректировки, а переходим к обработке следующей книги) BooksAutoCorrectProcessingModeEnum AutoCorrectProcessingMode = (m_listViewFB2Files.SelectedItems.Count == 1) ? BooksAutoCorrectProcessingModeEnum.OneBookProcessing : BooksAutoCorrectProcessingModeEnum.BatchProcessing; foreach (ListViewItem SelectedItem in m_listViewFB2Files.SelectedItems) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( AutoCorrectProcessingMode, SelectedItem, SelectedItem.Text, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); ProgressBar.Update(); } break; case BooksAutoCorrectModeEnum.CheckedBooks: this.Text = string.Format("Автокорректировка помеченных {0} книг", m_listViewFB2Files.CheckedItems.Count); // при пакетной обработке (не прерывать обработку на вылете корректировки, а переходим к обработке следующей книги) AutoCorrectProcessingMode = (m_listViewFB2Files.CheckedItems.Count == 1) ? BooksAutoCorrectProcessingModeEnum.OneBookProcessing : BooksAutoCorrectProcessingModeEnum.BatchProcessing; foreach (ListViewItem CheckedItem in m_listViewFB2Files.CheckedItems) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( AutoCorrectProcessingMode, CheckedItem, CheckedItem.Text, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); } break; case BooksAutoCorrectModeEnum.BooksInGroup: this.Text = string.Format("Автокорректировка {0} книг в Группе", m_listViewFB2Files.SelectedItems[0].Group.Items.Count); foreach (ListViewItem Item in m_listViewFB2Files.SelectedItems[0].Group.Items) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( BooksAutoCorrectProcessingModeEnum.BatchProcessing, Item, Item.Text, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); ProgressBar.Update(); } break; case BooksAutoCorrectModeEnum.BooksInAllGroup: this.Text = string.Format("Автокорректировка {0} книг во всех Группах", m_listViewFB2Files.Items.Count); foreach (ListViewItem Item in m_listViewFB2Files.Items) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( BooksAutoCorrectProcessingModeEnum.BatchProcessing, Item, Item.Text, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); ProgressBar.Update(); } break; default: return; } if ((m_bw.CancellationPending)) { e.Cancel = true; return; } }