/// <summary> /// The file visitor. /// </summary> /// <param name="rootPath">The file path.</param> private void FileVisitor(string rootPath) { if (_cancelOperation) { return; } this.FoundItemRaised(new FoundItemEventArgs(rootPath, SearchItems.File)); if (_cancelOperation) { return; } if (_validator.IsFiltered(rootPath)) { var filteredArgs = new FilteredItemEventArgs(rootPath, SearchItems.File); this.FilteredItemRaised(filteredArgs); if (_cancelOperation || _excludeItem) { return; } _saveManager.SaveItem(rootPath, _savedItems); } }
/// <summary> /// The directory visitor. /// </summary> /// <param name="rootPath">The directory path.</param> private void DirectoryVisitor(string rootPath) { if (_cancelOperation) { return; } this.FoundItemRaised(new FoundItemEventArgs(rootPath, SearchItems.Directory)); if (_validator.IsFiltered(rootPath)) { var filteredArgs = new FilteredItemEventArgs(rootPath, SearchItems.Directory); this.FilteredItemRaised(filteredArgs); if (_cancelOperation) { return; } if (!_excludeItem) { _saveManager.SaveItem(rootPath, _savedItems); } } foreach (var file in Directory.EnumerateFiles(rootPath)) { this.FileVisitor(file); if (_cancelOperation) { return; } } var directories = Directory.GetDirectories(rootPath, "*", SearchOption.AllDirectories); if (directories.Any()) { foreach (var directory in directories) { this.DirectoryVisitor(directory); } } }
/// <summary> /// Handler for filtered event. /// </summary> /// <param name="sender">The sender.</param> /// <param name="eventArgs">The event args.</param> private void FilteredHandler(object sender, FilteredItemEventArgs eventArgs) { var searchInfo = new SearchInfo { Path = eventArgs.FilteredPath, ItemType = eventArgs.FilteredType, EventType = EventTypes.Filtered }; _eventInfoList.Add(searchInfo); //condition for exclude files if (_eventInfoList.Count > _countForExclude) { eventArgs.ExcludeItem = true; } }
/// <summary> /// Invoke filtered search event. /// </summary> private void FilteredItemRaised(FilteredItemEventArgs args) { Console.WriteLine($"Filtered {args.FilteredPath}"); this.FilteredItem?.Invoke(this, args); if (args.CancelRequested) { _cancelOperation = true; Console.WriteLine("Cansel operation..."); } if (args.ExcludeItem) { _excludeItem = true; Console.WriteLine($"Exclude {args.FilteredType}"); } }