/// <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; 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; } }
// Обработка файлов 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); foreach (ListViewItem SelectedItem in m_listViewFB2Files.SelectedItems) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( SelectedItem, SelectedItem.Text, m_listViewFB2Files.SelectedItems.Count == 1 ? true : false, m_sharpZipLib, m_fv2Validator ); m_bw.ReportProgress(++i); } break; case BooksAutoCorrectModeEnum.CheckedBooks: this.Text = string.Format("Автокорректировка помеченных {0} книг", m_listViewFB2Files.CheckedItems.Count); foreach (ListViewItem CheckedItem in m_listViewFB2Files.CheckedItems) { if ((m_bw.CancellationPending)) { e.Cancel = true; return; } // обработка файла WorksWithBooks.autoCorrect( CheckedItem, CheckedItem.Text, m_listViewFB2Files.CheckedItems.Count == 1 ? true : false, 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(Item, Item.Text, false, m_sharpZipLib, m_fv2Validator); m_bw.ReportProgress(++i); } 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(Item, Item.Text, false, m_sharpZipLib, m_fv2Validator); m_bw.ReportProgress(++i); } break; default: return; } if ((m_bw.CancellationPending)) { e.Cancel = true; return; } }