/// <summary> /// Метод, срабатывающий по окончании работы механизма поиска кандидатов /// на удаление в отдельном потоке. /// </summary> private void GttWrk_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // Указываем сколько МБ освободится при удалении всех файлов... CM_Info.Text = String.Format(AppStrings.PS_FrFInfo, CoreLib.SclBytes(TotalSize)); // Проверим есть ли кандидаты для удаления (очистки)... if (CM_FTable.Items.Count == 0) { // Выдадим сообщение если очищать нечего... MessageBox.Show(AppStrings.PS_LoadErr, Properties.Resources.AppName, MessageBoxButtons.OK, MessageBoxIcon.Warning); // Отключим кнопку запуска очистки... CM_Clean.Enabled = false; // Закроем форму. Close(); } else { // Включаем кнопку очистки... CM_Clean.Enabled = true; } }
/// <summary> /// Ищет и добавляет файлы для удаления в таблицу модуля очистки. /// </summary> /// <param name="CleanDirs">Каталоги для выполнения очистки с маской имени</param> /// <param name="Recursive">Включает / отключает рекурсивный поиск</param> private void DetectFilesForCleanup(List <String> CleanDirs, bool Recursive) { foreach (string DirMs in CleanDirs) { // Извлечём имя каталога с полным путём и маску... string CleanDir = Path.GetDirectoryName(DirMs); string CleanMask = Path.GetFileName(DirMs); // Проверим чтобы каталог существовал... if (Directory.Exists(CleanDir)) { // Запускаем... try { // Открываем каталог... DirectoryInfo DInfo = new DirectoryInfo(CleanDir); // Считываем список файлов по заданной маске... FileInfo[] DirList = DInfo.GetFiles(CleanMask); // Начинаем обход массива... foreach (FileInfo DItem in DirList) { // Обрабатываем найденное. Добавляем... ListViewItem LvItem = new ListViewItem(DItem.Name) { Checked = !NoAutoCheck, // Помечаем флажком... ToolTipText = Path.Combine(CleanDir, DItem.Name) // Указываем полный путь во всплывающую подсказку... }; // Вычисляем и указываем размер и дату изменения... LvItem.SubItems.Add(CoreLib.SclBytes(DItem.Length)); LvItem.SubItems.Add(DItem.LastWriteTime.ToString()); if (CM_FTable.InvokeRequired) { // Вставляем в таблицу... Invoke((MethodInvoker) delegate() { CM_FTable.Items.Add(LvItem); }); } TotalSize += DItem.Length; // Инкрементируем общий счётчик... } if (Recursive) { try { // Пройдём по подкаталогам рекурсивно. Получаем список вложенных... List <String> SubDirs = new List <string>(); // Обойдём вложенные каталоги... foreach (DirectoryInfo Dir in DInfo.GetDirectories()) { SubDirs.Add(Path.Combine(Dir.FullName, CleanMask)); } // Проверим наличие элементов для обхода... if (SubDirs.Count > 0) { // Вызовем функцию рекурсивно... DetectFilesForCleanup(SubDirs, true); } } catch (Exception Ex) { CoreLib.WriteStringToLog(Ex.Message); } } } catch (Exception Ex) { // Подавляем возможные сообщения и пишем в лог... CoreLib.WriteStringToLog(Ex.Message); } } } }