// ============================================================================================= // ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ И АЛГОРИТМЫ КЛАССА // ============================================================================================= #region Вспомогательные методы и алгоритмы класса // реальное значение всех Групп и всех копий книг в этих Группах private void RealGroupsAndBooks(ListView lvResult, ListView lvFilesCount) { int AllGroups = 0; int AllBooks = 0; foreach (ListViewGroup lvGroup in lvResult.Groups) { int RealBookInGroup = 0; if (lvGroup.Items.Count > 1) { foreach (ListViewItem lvi in lvGroup.Items) { if (!lvi.Font.Strikeout) { ++RealBookInGroup; } } } if (RealBookInGroup > 1) { AllBooks += RealBookInGroup; ++AllGroups; } } // реальное число групп копий MiscListView.ListViewStatus(lvFilesCount, (int)FilesCountViewDupCollumnEnum.AllGroups, AllGroups.ToString()); // реальное число копий книг во всех группах MiscListView.ListViewStatus(lvFilesCount, (int)FilesCountViewDupCollumnEnum.AllBoolsInAllGroups, AllBooks.ToString()); }
// удалить помеченные файлы... public void DeleteCheckedFiles(ref BackgroundWorker bw, ref DoWorkEventArgs e, ListView lvResult) { int i = 0; ListView.CheckedListViewItemCollection checkedItems = lvResult.CheckedItems; foreach (ListViewItem lvi in checkedItems) { // Проверить флаг на остановку процесса if ((bw.CancellationPending)) { e.Cancel = true; // Выставить окончание - по отмене, сработает событие bwcmd_RunWorkerCompleted return; } else { string sFilePath = lvi.Text; if (File.Exists(sFilePath)) { File.Delete(sFilePath); MiscListView.deleteAllItemForNonExistFileWithCounter(lvResult, lvi, m_Fast); m_bFilesWorked |= true; } bw.ReportProgress(++i); } } }
// ============================================================================================= // Реализация Copy/Move/Delete помеченных книг // ============================================================================================= #region еализация Copy/Move/Delete помеченных книг // копировать или переместить файлы в... public void CopyOrMoveCheckedFilesTo(ref BackgroundWorker bw, ref DoWorkEventArgs e, bool IsCopy, string SourceDir, string TargetDir, ListView lvResult, int nFileExistMode) { int i = 0; ListView.CheckedListViewItemCollection checkedItems = lvResult.CheckedItems; foreach (ListViewItem lvi in checkedItems) { // Проверить флаг на остановку процесса if ((bw.CancellationPending)) { e.Cancel = true; // Выставить окончание - по отмене, сработает событие bwcmd_RunWorkerCompleted return; } else { string FilePath = lvi.Text; // есть ли такая книга на диске? Если нет - то смотрим следующую Regex rx = new Regex(@"\\+"); FilePath = rx.Replace(FilePath, "\\"); if (File.Exists(FilePath)) { string NewPath = Path.Combine(TargetDir, Path.GetFileName(FilePath)); FileInfo fi = new FileInfo(NewPath); if (!fi.Directory.Exists) { Directory.CreateDirectory(fi.Directory.ToString()); } if (File.Exists(NewPath)) { if (nFileExistMode == 0) { File.Delete(NewPath); } else { NewPath = filesWorker.createFilePathWithSufix(NewPath, nFileExistMode); } } if (IsCopy) { File.Copy(FilePath, NewPath); } else { File.Move(FilePath, NewPath); MiscListView.deleteAllItemForNonExistFileWithCounter(lvResult, lvi, m_Fast); } m_bFilesWorked |= true; bw.ReportProgress(++i); // отобразим данные в контролах } } } }
// Обработка файлов private void bwcmd_DoWork(object sender, DoWorkEventArgs e) { m_bFilesWorked = false; if (m_Fast) { m_lvResult.BeginUpdate(); } switch (m_WorkMode) { case BooksWorkModeEnum.CopyCheckedBooks: this.Text = "Копирование помеченных копий книг в папку " + m_TargetDir; this.Text += String.Format(": {0}", m_lvResult.CheckedItems.Count); CopyOrMoveCheckedFilesTo(ref m_bwcmd, ref e, true, m_SourceDir, m_TargetDir, m_lvResult, m_FileExistMode); break; case BooksWorkModeEnum.MoveCheckedBooks: this.Text = "Перемещение помеченных копий книг в папку " + m_TargetDir; this.Text += String.Format(": {0}", m_lvResult.CheckedItems.Count); CopyOrMoveCheckedFilesTo(ref m_bwcmd, ref e, false, m_SourceDir, m_TargetDir, m_lvResult, m_FileExistMode); break; case BooksWorkModeEnum.DeleteCheckedBooks: this.Text = "Удаление помеченных копий книг"; this.Text += String.Format(": {0}", m_lvResult.CheckedItems.Count); DeleteCheckedFiles(ref m_bwcmd, ref e, m_lvResult); break; default: return; } if (!m_Fast) { // Чистка списка Групп копий книг Дубликатора от пустых итемов MiscListView.cleanGroupList(m_lvResult); } if (m_Fast) { m_lvResult.EndUpdate(); } }
// Обработка файлов private void bwcmd_DoWork(object sender, DoWorkEventArgs e) { m_bFilesWorked = false; if (m_Fast) { m_listViewFB2Files.BeginUpdate(); } this.Text += ": " + m_listViewFB2Files.CheckedItems.Count.ToString() + " книг"; // удаление всех элементов Списка, для которых отсутствуют файлы на жестком диске для Корректора MiscListView.removeAllItemForNonExistFile(m_SourceDir.Trim(), m_listViewFB2Files); switch (m_WorkMode) { case BooksWorkModeEnum.CopyCheckedBooks: this.Text = "Копирование помеченных книг в папку " + m_TargetDir; this.Text += String.Format(": {0}", m_listViewFB2Files.CheckedItems.Count); CopyOrMoveCheckedFilesTo(ref m_bwcmd, ref e, true, m_SourceDir, m_TargetDir, m_listViewFB2Files, m_FileExistMode); break; case BooksWorkModeEnum.MoveCheckedBooks: this.Text = "Перемещение помеченных книг в папку " + m_TargetDir; this.Text += String.Format(": {0}", m_listViewFB2Files.CheckedItems.Count); CopyOrMoveCheckedFilesTo(ref m_bwcmd, ref e, false, m_SourceDir, m_TargetDir, m_listViewFB2Files, m_FileExistMode); break; case BooksWorkModeEnum.DeleteCheckedBooks: this.Text = "Удаление помеченных книг"; this.Text += String.Format(": {0}", m_listViewFB2Files.CheckedItems.Count); DeleteCheckedFiles(ref m_bwcmd, ref e, m_listViewFB2Files); break; default: return; } if (m_Fast) { m_listViewFB2Files.EndUpdate(); } }