This commit is contained in:
Dvurechensky 2025-05-12 06:55:09 +03:00
parent e5e5e5c9a3
commit 2edf663d5b
48 changed files with 450 additions and 81 deletions

3
.gitignore vendored

@ -1,6 +1,7 @@
## Ignore Visual Studio temporary files, build results, and ## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons. ## files generated by popular Visual Studio add-ons.
pre_commit.log
pre_commit.ps1
# User-specific files # User-specific files
*.suo *.suo
*.user *.user

@ -1,4 +1,12 @@
namespace FileSearch /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch
{ {
partial class ExceptionsForm partial class ExceptionsForm
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
using FileSearch.Logic.UI.Entries; using FileSearch.Logic.UI.Entries;
namespace FileSearch namespace FileSearch

@ -1,4 +1,12 @@
namespace FileSearch /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch
{ {
partial class LargeListViewUserControl partial class LargeListViewUserControl
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
using FileSearch.Logic.UI.Entries; using FileSearch.Logic.UI.Entries;
using FileSearch.Logic.UI.ViewBuilders; using FileSearch.Logic.UI.ViewBuilders;

@ -1,4 +1,12 @@
using System.Globalization; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using System.Globalization;
namespace FileSearch.Logic namespace FileSearch.Logic
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.CriterionSchemas; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.CriterionSchemas;
using FileSearch.Logic.Model.Engine; using FileSearch.Logic.Model.Engine;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
namespace FileSearch.Logic.Model.Contexts namespace FileSearch.Logic.Model.Contexts

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
namespace FileSearch.Logic.Model.CriterionSchemas namespace FileSearch.Logic.Model.CriterionSchemas
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.EncodingDetection; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.EncodingDetection;
using FileSearch.Logic.Model.Engine; using FileSearch.Logic.Model.Engine;
using System.Text; using System.Text;

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
namespace FileSearch.Logic.Model.CriterionSchemas namespace FileSearch.Logic.Model.CriterionSchemas
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
using FileSearch.Logic.Model.Entities; using FileSearch.Logic.Model.Entities;
namespace FileSearch.Logic.Model.CriterionSchemas namespace FileSearch.Logic.Model.CriterionSchemas

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
using FileSearch.Logic.Model.Entities; using FileSearch.Logic.Model.Entities;
namespace FileSearch.Logic.Model.CriterionSchemas namespace FileSearch.Logic.Model.CriterionSchemas

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
namespace FileSearch.Logic.Model.CriterionSchemas namespace FileSearch.Logic.Model.CriterionSchemas
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Contexts; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Contexts;
using FileSearch.Logic.Model.Engine; using FileSearch.Logic.Model.Engine;
using Ionic.Zip; using Ionic.Zip;

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
namespace FileSearch.Logic.Model.CriterionSchemas namespace FileSearch.Logic.Model.CriterionSchemas

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
namespace FileSearch.Logic.Model.CriterionSchemas namespace FileSearch.Logic.Model.CriterionSchemas

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
namespace FileSearch.Logic.Model.CriterionSchemas namespace FileSearch.Logic.Model.CriterionSchemas
{ {

@ -1,4 +1,12 @@
using System.Text; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using System.Text;
namespace FileSearch.Logic.Model.EncodingDetection namespace FileSearch.Logic.Model.EncodingDetection
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Engine /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Engine
{ {
public class CriterionBase public class CriterionBase
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Engine /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Engine
{ {
public enum CriterionWeight public enum CriterionWeight
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.EncodingDetection; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.EncodingDetection;
using FileSearch.Logic.Model.Entities; using FileSearch.Logic.Model.Entities;
namespace FileSearch.Logic.Model.Engine namespace FileSearch.Logic.Model.Engine

@ -1,4 +1,12 @@
using System.Runtime.InteropServices; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using System.Runtime.InteropServices;
namespace FileSearch.Logic.Model.Engine namespace FileSearch.Logic.Model.Engine
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Engine /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Engine
{ {
public interface ICriterion public interface ICriterion
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Engine /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Engine
{ {
public interface ICriterionContext public interface ICriterionContext
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Engine /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Engine
{ {
public class SearchException public class SearchException
{ {

@ -1,4 +1,12 @@
using System.Xml; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using System.Xml;
using Ionic.Zip; using Ionic.Zip;
namespace FileSearch.Logic.Model.Engine namespace FileSearch.Logic.Model.Engine

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Engine /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Engine
{ {
public class SearchResult public class SearchResult
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Engine /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Engine
{ {
internal class TimedCallback<T> internal class TimedCallback<T>
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Entities /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Entities
{ {
internal enum FileDateOption internal enum FileDateOption
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Model.Tree /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Model.Tree
{ {
public class TreeViewBuilder public class TreeViewBuilder
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.Plugin /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.Plugin
{ {
internal class ErrorPlugin : IPluginFacade internal class ErrorPlugin : IPluginFacade
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
namespace FileSearch.Logic.Plugin namespace FileSearch.Logic.Plugin
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.UI.ViewBuilders; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.UI.ViewBuilders;
namespace FileSearch.Logic.Plugin namespace FileSearch.Logic.Plugin
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.UI.ViewBuilders; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.UI.ViewBuilders;
namespace FileSearch.Logic.Plugin namespace FileSearch.Logic.Plugin
{ {

@ -1,4 +1,12 @@
using System.Reflection; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using System.Reflection;
namespace FileSearch.Logic.Plugin namespace FileSearch.Logic.Plugin
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.UI.Entries /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.UI.Entries
{ {
public interface IPathEntry public interface IPathEntry
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.UI.Entries /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.UI.Entries
{ {
internal class PathEntry : IPathEntry internal class PathEntry : IPathEntry
{ {

@ -1,4 +1,12 @@
namespace FileSearch.Logic.UI.Entries /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.UI.Entries
{ {
internal class PathEventArgs : EventArgs internal class PathEventArgs : EventArgs
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
namespace FileSearch.Logic.UI.Entries namespace FileSearch.Logic.UI.Entries
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.UI.Entries; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.UI.Entries;
namespace FileSearch.Logic.UI.ViewBuilders namespace FileSearch.Logic.UI.ViewBuilders
{ {

@ -1,4 +1,12 @@
using FileSearch.Logic.Model.Engine; /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic.Model.Engine;
using FileSearch.Logic.UI.Entries; using FileSearch.Logic.UI.Entries;
namespace FileSearch.Logic.UI.ViewBuilders namespace FileSearch.Logic.UI.ViewBuilders

@ -1,4 +1,12 @@
namespace FileSearch.Logic.UI.ViewBuilders /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch.Logic.UI.ViewBuilders
{ {
internal static class ViewBuilderFactory internal static class ViewBuilderFactory
{ {

@ -1,4 +1,12 @@
namespace FileSearch /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch
{ {
partial class MainForm partial class MainForm
{ {

@ -1,3 +1,11 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
using FileSearch.Logic; using FileSearch.Logic;
using FileSearch.Logic.Model.Engine; using FileSearch.Logic.Model.Engine;
using FileSearch.Logic.Model.Tree; using FileSearch.Logic.Model.Tree;
@ -28,7 +36,7 @@ namespace FileSearch
#region Logic #region Logic
/// <summary> /// <summary>
/// Подготовка к запуску сеанса поиска /// Подготовка к запуску сеанса поиска
/// </summary> /// </summary>
private DirectoryInfo SearchInit() private DirectoryInfo SearchInit()
{ {
@ -41,14 +49,14 @@ namespace FileSearch
SaveInfo(comboBox: true); SaveInfo(comboBox: true);
SearchBtn.Text = @"Остановить"; SearchBtn.Text = @"Остановить";
statusLabel.Text = @"Поиск... Пожалуйста подождите."; statusLabel.Text = @"Поиск... Пожалуйста подождите.";
statusLabelExceptions.Text = null; statusLabelExceptions.Text = null;
return new DirectoryInfo(DirPathTxt.Text.Trim('\\') + "\\"); return new DirectoryInfo(DirPathTxt.Text.Trim('\\') + "\\");
} }
/// <summary> /// <summary>
/// Обработка события обнаружения данных /// Обработка события обнаружения данных
/// </summary> /// </summary>
/// <param name="searchResults">searchResults</param> /// <param name="searchResults">searchResults</param>
private void LoadList(IEnumerable<SearchResult> searchResults) private void LoadList(IEnumerable<SearchResult> searchResults)
@ -66,13 +74,13 @@ namespace FileSearch
} }
lstResults.AddSearchResults(searchResults); lstResults.AddSearchResults(searchResults);
AddTimerTextInfo(_fileSearcher.CurrentTime.GetFriendlyNotation()); // обновляем таймер AddTimerTextInfo(_fileSearcher.CurrentTime.GetFriendlyNotation()); // обновляем таймер
AddFindFilesCount(lstResults.Count); // Обновляем число обнаруженных файлов AddFindFilesCount(lstResults.Count); // Обновляем число обнаруженных файлов
AddThreeViewData(searchResults); // Обновляем дерево директорий AddThreeViewData(searchResults); // Обновляем дерево директорий
} }
/// <summary> /// <summary>
/// Обработка окончания сеанса поиска /// Обработка окончания сеанса поиска
/// </summary> /// </summary>
private void LoadListFinished() private void LoadListFinished()
{ {
@ -84,23 +92,23 @@ namespace FileSearch
var exceptions = _fileSearcher.Exceptions; var exceptions = _fileSearcher.Exceptions;
if (exceptions.Count > 0) if (exceptions.Count > 0)
statusLabelExceptions.Text = string.Format(CultureInfo.InvariantCulture, "{0} ошибок в поиске", exceptions.Count); statusLabelExceptions.Text = string.Format(CultureInfo.InvariantCulture, "{0} ошибок в поиске", exceptions.Count);
SearchBtn.Text = @"Поиск"; SearchBtn.Text = @"Поиск";
PauseBtn.Text = @"Пауза"; PauseBtn.Text = @"Пауза";
SearchBtn.Enabled = true; SearchBtn.Enabled = true;
statusLabel.Text = @"Завершено за " + _fileSearcher.OperatingTime.GetFriendlyNotation() + @". Найдено: " + lstResults.Count; statusLabel.Text = @"Завершено за " + _fileSearcher.OperatingTime.GetFriendlyNotation() + @". Найдено: " + lstResults.Count;
toolStripProgressBar1.Style = ProgressBarStyle.Blocks; toolStripProgressBar1.Style = ProgressBarStyle.Blocks;
if (DirsTreeView.Nodes.Count > 0) if (DirsTreeView.Nodes.Count > 0)
DirsTreeView.Focus(); DirsTreeView.Focus();
} }
/// <summary> /// <summary>
/// Конфигурирование критерий поиска /// Конфигурирование критерий поиска
/// ///
/// TODO: В будущем можно сделать тонкую настройку /// TODO: В будущем можно сделать тонкую настройку
/// критерий поиска в UI указав Control для включения тех или иных /// критерий поиска в UI указав Control для включения тех или иных
/// </summary> /// </summary>
/// <param name="directoryInfo">directoryInfo</param> /// <param name="directoryInfo">directoryInfo</param>
/// <param name="text">text</param> /// <param name="text">text</param>
@ -128,7 +136,7 @@ namespace FileSearch
} }
/// <summary> /// <summary>
/// Построение дерева директорий /// Построение дерева директорий
/// </summary> /// </summary>
/// <param name="searchResults">IEnumerable</param> /// <param name="searchResults">IEnumerable</param>
private void AddThreeViewData(IEnumerable<SearchResult> searchResults) private void AddThreeViewData(IEnumerable<SearchResult> searchResults)
@ -137,7 +145,7 @@ namespace FileSearch
} }
/// <summary> /// <summary>
/// Инициализация чтения максимального числа файлов в директории /// Инициализация чтения максимального числа файлов в директории
/// </summary> /// </summary>
private void LoadingMaxFiles() private void LoadingMaxFiles()
{ {
@ -153,7 +161,7 @@ namespace FileSearch
} }
/// <summary> /// <summary>
/// Формирование async задачи на чтение максимального числа файлов в директории /// Формирование async задачи на чтение максимального числа файлов в директории
/// </summary> /// </summary>
/// <param name="searchPath">path</param> /// <param name="searchPath">path</param>
public async Task GetAllFilesExecute(string searchPath) public async Task GetAllFilesExecute(string searchPath)
@ -166,7 +174,7 @@ namespace FileSearch
} }
/// <summary> /// <summary>
/// Получение максимального числа файлов в директории (с вложенными внутри) /// Получение максимального числа файлов в директории (с вложенными внутри)
/// </summary> /// </summary>
/// <param name="searchPath">path</param> /// <param name="searchPath">path</param>
private void GetAllFiles(string searchPath) private void GetAllFiles(string searchPath)
@ -183,7 +191,7 @@ namespace FileSearch
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
// Обработка отмены операции // Обработка отмены операции
AddMaxFilesTxtInfo(count.ToString()); AddMaxFilesTxtInfo(count.ToString());
AddProgressBarLoadMax(false); AddProgressBarLoadMax(false);
} }
@ -227,28 +235,28 @@ namespace FileSearch
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
throw; // Пробрасываем исключение дальше для обработки в вызывающем коде throw; // Пробрасываем исключение дальше для обработки в вызывающем коде
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
return 0; // Пропускаем каталоги, к которым нет доступа return 0; // Пропускаем каталоги, к которым нет доступа
} }
catch (DirectoryNotFoundException) catch (DirectoryNotFoundException)
{ {
return 0; // Пропускаем отсутствующие каталоги return 0; // Пропускаем отсутствующие каталоги
} }
} }
/// <summary> /// <summary>
/// Сохранение полей (простейшее) /// Сохранение полей (простейшее)
/// </summary> /// </summary>
/// <param name="comboBox">сохранение выбранного пути в comboBox в текущей сессии</param> /// <param name="comboBox">сохранение выбранного пути в comboBox в текущей сессии</param>
private void SaveInfo(bool comboBox = false) private void SaveInfo(bool comboBox = false)
{ {
File.WriteAllText(@"DirInfo.dat", DirPathTxt.Text); File.WriteAllText(@"DirInfo.dat", DirPathTxt.Text);
File.WriteAllText(@"FileRegex.dat", FileRegexPathTxt.Text); File.WriteAllText(@"FileRegex.dat", FileRegexPathTxt.Text);
//сохранение выбранного пути для поиска в текущей сессии //сохранение выбранного пути для поиска в текущей сессии
if (comboBox) if (comboBox)
{ {
var content = DirPathTxt.SelectedItem != null ? (string)DirPathTxt.SelectedItem : DirPathTxt.Text; var content = DirPathTxt.SelectedItem != null ? (string)DirPathTxt.SelectedItem : DirPathTxt.Text;
@ -308,7 +316,7 @@ namespace FileSearch
var dirInfo = SearchInit(); var dirInfo = SearchInit();
if (!dirInfo.Exists) if (!dirInfo.Exists)
{ {
MessageBox.Show(@"Путь не существует.", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); MessageBox.Show(@"Путь не существует.", @"Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return; return;
} }
@ -321,8 +329,8 @@ namespace FileSearch
{ {
_fileSearcher?.Pause((state) => _fileSearcher?.Pause((state) =>
{ {
PauseBtn.Text = (state) ? "Далее" : "Пауза"; PauseBtn.Text = (state) ? "Далее" : "Пауза";
}, (PauseBtn.Text == "Далее") ? false : true); }, (PauseBtn.Text == "Далее") ? false : true);
} }
private void DirPathTxt_TextChanged(object sender, EventArgs e) private void DirPathTxt_TextChanged(object sender, EventArgs e)
@ -354,7 +362,7 @@ namespace FileSearch
{ {
if (_fileSearcher != null && _fileSearcher.IsRunning) if (_fileSearcher != null && _fileSearcher.IsRunning)
{ {
MessageBox.Show("Поиск ещё идёт!"); MessageBox.Show("Поиск ещё идёт!");
return; return;
} }
@ -382,7 +390,7 @@ namespace FileSearch
#region Async UI #region Async UI
/// <summary> /// <summary>
/// Обновление AllFilesTxt /// Обновление AllFilesTxt
/// </summary> /// </summary>
/// <param name="text">count</param> /// <param name="text">count</param>
private void AddMaxFilesTxtInfo(string text) private void AddMaxFilesTxtInfo(string text)
@ -398,7 +406,7 @@ namespace FileSearch
} }
/// <summary> /// <summary>
/// Обновление pictureBoxLoading /// Обновление pictureBoxLoading
/// </summary> /// </summary>
/// <param name="visible">bool</param> /// <param name="visible">bool</param>
private void AddProgressBarLoadMax(bool visible) private void AddProgressBarLoadMax(bool visible)
@ -414,7 +422,7 @@ namespace FileSearch
} }
/// <summary> /// <summary>
/// Обновление timerTxt /// Обновление timerTxt
/// </summary> /// </summary>
/// <param name="text">count</param> /// <param name="text">count</param>
private void AddTimerTextInfo(string text) private void AddTimerTextInfo(string text)
@ -430,7 +438,7 @@ namespace FileSearch
} }
/// <summary> /// <summary>
/// Обновление FindFilesTxt /// Обновление FindFilesTxt
/// </summary> /// </summary>
/// <param name="count">count</param> /// <param name="count">count</param>
private void AddFindFilesCount(int count) private void AddFindFilesCount(int count)

@ -1,14 +1,22 @@
/*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
namespace FileSearch namespace FileSearch
{ {
internal static class Program internal static class Program
{ {
/// <summary> /// <summary>
/// Основная точка входа в приложение. /// Основная точка входа в приложение.
/// </summary> /// </summary>
[STAThread] [STAThread]
static void Main() static void Main()
{ {
// Чтобы настроить конфигурацию приложения, например установить настройки высокого разрешения или шрифт по умолчанию, // Чтобы настроить конфигурацию приложения, например установить настройки высокого разрешения или шрифт по умолчанию,
// https://aka.ms/applicationconfiguration. // https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize(); ApplicationConfiguration.Initialize();
Application.Run(new MainForm()); Application.Run(new MainForm());

@ -1,4 +1,12 @@
//------------------------------------------------------------------------------ /*
* Author: Nikolay Dvurechensky
* Site: https://www.dvurechensky.pro/
* Gmail: dvurechenskysoft@gmail.com
* Last Updated: 12 мая 2025 06:51:53
* Version: 1.0.7
*/
//------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// Этот код создан программой. // Этот код создан программой.
// Исполняемая версия:4.0.30319.42000 // Исполняемая версия:4.0.30319.42000

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 MiB

After

Width:  |  Height:  |  Size: 5.2 MiB