// Проверяем - это отмена, ошибка, или конец задачи и сообщить private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // очистка временной папки FilesWorker.RemoveDir(m_TempDir); if (m_autoResizeColumns) { MiscListView.AutoResizeColumns(m_listView); } DateTime dtEnd = DateTime.Now; string sTime = dtEnd.Subtract(m_dtStart).ToString() + " (час.:мин.:сек.)"; if (e.Cancelled) { m_EndMode.EndMode = EndWorkModeEnum.Cancelled; m_EndMode.Message = "Отображение метаданных книг прервано!\nСгенерирован список " + ProgressBar.Value + " каталогов и папок из " + ProgressBar.Maximum + "\nЗатрачено времени: " + sTime; } else if (e.Error != null) { m_EndMode.EndMode = EndWorkModeEnum.Error; m_EndMode.Message = "Ошибка:\n" + e.Error.Message + "\n" + e.Error.StackTrace + "\nСгенерирован список " + ProgressBar.Value + " каталогов и папок из " + ProgressBar.Maximum + "\nЗатрачено времени: " + sTime; } else { m_EndMode.EndMode = EndWorkModeEnum.Done; m_EndMode.Message = "Отображение метаданных книг завершено!\nЗатрачено времени: " + sTime; } this.Close(); }
/// <summary> /// создание итема в списке для невалидной книги /// </summary> private void createNotValidateBookItem(string FilePath, FB2UnionGenres fb2g, FB2Validator fv2Validator, SharpZipLibWorker sharpZipLib) { if (File.Exists(FilePath)) { string TempDir = Settings.Settings.TempDirPath; string FileExt = Path.GetExtension(FilePath); ListViewItem.ListViewSubItem[] subItems; if (FilesWorker.isFB2File(FilePath) || FilesWorker.isFB2Archive(FilePath)) { ListViewItem item = new ListViewItem(FilePath, FilesWorker.isFB2File(FilePath) ? 1 : 2); try { if (FilesWorker.isFB2File(FilePath)) { item.ForeColor = Colors.FB2ForeColor; subItems = createSubItemsWithMetaData(FilePath, FileExt, item, ref fb2g, ref fv2Validator); } else { // для zip-архивов FilesWorker.RemoveDir(TempDir); sharpZipLib.UnZipFB2Files(FilePath, TempDir); string [] files = Directory.GetFiles(TempDir); if (FilesWorker.isFB2File(files[0])) { item.ForeColor = Colors.ZipFB2ForeColor; subItems = createSubItemsWithMetaData(files[0], FileExt, item, ref fb2g, ref fv2Validator); } else { item.ForeColor = Colors.BadZipForeColor; subItems = WorksWithBooks.createEmptySubItemsForItem(item); } } if (subItems != null) { item.SubItems.AddRange(subItems); } } catch (Exception ex) { Debug.DebugMessage( null, ex, "FB2NotValidateForm.createNotValidateBookItem(): Создание итема в списке для невалидной книги." ); subItems = WorksWithBooks.createEmptySubItemsForItem(item); if (subItems != null) { item.SubItems.AddRange(subItems); item.ForeColor = Colors.BadZipForeColor; } } item.Tag = new ListViewItemType("f", FilePath); item.BackColor = Colors.FileBackColor; if (subItems != null) { m_listViewFB2Files.Items.Add(item); } } } }
// Проверяем - это отмена, ошибка, или конец задачи и сообщить private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { DateTime dtEnd = DateTime.Now; FilesWorker.RemoveDir(Settings.Settings.TempDirPath); string sTime = dtEnd.Subtract(m_dtStart).ToString().Substring(0, 8) + " (час.:мин.:сек.)"; if (e.Cancelled) { m_EndMode.EndMode = EndWorkModeEnum.Cancelled; if (m_StopToSave) { // остановка поиска копий с сохранением списка необработанных книг в файл m_StopToSave = false; // сохранение в xml-файл списка данных о невалидных и необработанных книг sfdList.Title = "Укажите файл для будущего возобновления поиска всех невалидных книг:"; sfdList.Filter = "SharpFBTools Файлы хода работы Корректора (*.corr_break)|*.corr_break"; sfdList.FileName = string.Empty; sfdList.InitialDirectory = Settings.Settings.ProgDir; DialogResult result = sfdList.ShowDialog(); if (result == DialogResult.OK) { ControlPanel.Enabled = false; StatusLabel.Text += "Сохранение данных анализа в файл:\r"; StatusLabel.Text += sfdList.FileName; saveSearchedDataToXmlFile(sfdList.FileName, ref m_FilesList); m_EndMode.Message = "Поиск всех невалидных fb2 файлов прерван!\nДанные поиска и список оставшихся для обработки книг сохранены в xml-файл:\n\n" + sfdList.FileName + "\n\nЗатрачено времени: " + sTime; } } else { // остановка поиска без сохранения результата работы в xml-файл m_EndMode.Message = "Поиск всех невалидных fb2-файлов остановлен!\nСписок невалидных fb2-файлов не сформирован полностью!\nЗатрачено времени: " + sTime; } } else if (e.Error != null) { m_EndMode.EndMode = EndWorkModeEnum.Error; m_EndMode.Message = "Ошибка:\n" + e.Error.Message + "\n" + e.Error.StackTrace + "\nЗатрачено времени: " + sTime; } else { m_EndMode.EndMode = EndWorkModeEnum.Done; m_EndMode.Message = "Поиск всех невалидных fb2-файлов завершен!\nЗатрачено времени: " + sTime; if (m_listViewFB2Files.Items.Count == 0) { m_EndMode.Message += "\n\nНе найдено НИ ОДНОЙ невалидной книги!"; } } m_FilesList.Clear(); this.Close(); }
/// <summary> /// Валидация fb2, fb2.zip ли fbz файлов по пути FilePath /// </summary> /// <returns>Пустая строка, файл валиден; Строка с сообщением, если файл невалиден</returns> public string ValidatingFB2File(string FilePath) { bool IsZip = false; string Result = validate(FilePath, Settings.Settings.SchemePath, ref IsZip); if (IsZip) // удаляем временные файлы только, если проверяли архив { FilesWorker.RemoveDir(_TempDir); } return(Result); }
/// <summary> /// Хеширование файлов в контексте Id книг: /// Одинаковый Id Книги (копии и/или разные версии правки одной и той же книги) /// </summary> /// <param name="FilesList">Список файлов для сканированияl</param> /// <param name="htFB2ForID">Хеш Таблица с книгами с одинаковыми ID</param> /// <returns>Признак непрерывности обработки файлов</returns> public bool FilesHashForIDParser(BackgroundWorker bw, DoWorkEventArgs e, Label StatusLabel, ProgressBar ProgressBar, string TempDir, List <string> FilesList, HashtableClass htFB2ForID) { StatusLabel.Text += "Хэширование по Id книг...\r"; ProgressBar.Maximum = FilesList.Count; ProgressBar.Value = 0; List <string> FinishedFilesList = new List <string>(); for (int i = 0; i != FilesList.Count; ++i) { if (FilesWorker.isFB2File(FilesList[i])) { // заполнение хеш таблицы данными о fb2-книгах в контексте их ID MakeFB2IDHashTable(null, FilesList[i], ref htFB2ForID); // обработанные файлы FinishedFilesList.Add(FilesList[i]); } else { if (FilesWorker.isFB2Archive(FilesList[i])) { try { if (_sharpZipLib.UnZipFB2Files(FilesList[i], TempDir) != -1) { string[] files = Directory.GetFiles(TempDir); if (files.Length > 0) { if (FilesWorker.isFB2File(files[0])) { // заполнение хеш таблицы данными о fb2-книгах в контексте их ID MakeFB2IDHashTable(FilesList[i], files[0], ref htFB2ForID); // обработанные файлы FinishedFilesList.Add(FilesList[i]); } } } } catch (Exception ex) { Debug.DebugMessage( FilesList[i], ex, "Дубликатор.CompareForm.FilesHashForIDParser(): Хеширование файлов в контексте Id книг." ); } FilesWorker.RemoveDir(TempDir); } } bw.ReportProgress(i); // отобразим данные в контролах if (bw.CancellationPending) { // удаление из списка всех файлов обработанных книг WorksWithBooks.removeFinishedFilesInFilesList(ref FilesList, ref FinishedFilesList); e.Cancel = true; return(false); } } // удаление элементов таблицы, value (списки) которых состоят из 1-го элемента (это не копии) _compComm.removeNotCopiesEntryInHashTable(htFB2ForID); // удаление из списка всех файлов обработанных книг WorksWithBooks.removeFinishedFilesInFilesList(ref FilesList, ref FinishedFilesList); return(true); }