private Task SearchInit(string toFind) { _cancellationSource = new CancellationTokenSource(); _textSearcher = new KmpTextSearcher(Encoding.GetBytes(toFind)); return(Task.Run(() => SearchInDirectory(_textSearcher, SearchDirectory), _cancellationSource.Token)); }
// TODO: Make async enumerable with c# 8 and netcoreapp31 private async Task SearchInDirectory(ITextSearcher textSearcher, string directory) { foreach (var file in Directory.EnumerateFiles(SearchDirectory)) { if (_cancellationSource?.IsCancellationRequested ?? true) { return; } if (new FileInfo(file).Length > FileSizeLimitInBytes) { continue; } // SearchAsync string in file var foundOffset = await textSearcher.SearchAsync(new BinaryReader(File.OpenRead(file))); if (foundOffset >= 0) { OnFoundMatch(new SequenceSearchResult(file, foundOffset)); } } if (!IsSearchSubDirectories) { return; } foreach (var dir in Directory.EnumerateDirectories(directory)) { await SearchInDirectory(textSearcher, dir); } }
internal TextSearcherViewModel(ITextSearcher textSearcher) { mTextSearcher = textSearcher; mTextSearcherAsCaptionProvider = textSearcher as ICaptionProvider; mTextSearcherAsDescriptionProvider = textSearcher as IDescriptionProvider; mTextSearcherAsIconProvider = textSearcher as IIconProvider; }
/// <summary> /// Handles change of the SelectedTextSearcher property. /// </summary> /// <param name="SelectedTextSearcher">New SelectedTextSearcher.</param> protected virtual void OnSelectedTextSearcherChanged(ITextSearcher previousTextSearcher, ITextSearcher currentTextSearcher) { IOptionsProvider optionsProvider = previousTextSearcher as IOptionsProvider; if (optionsProvider != null) { optionsProvider.OptionChanged -= OnTextSearcherOptionChanged; } optionsProvider = currentTextSearcher as IOptionsProvider; if (optionsProvider != null) { optionsProvider.OptionChanged += OnTextSearcherOptionChanged; } Find(SearchTerm, ImmediateSearch); }
//get a class that has the requaired interface public FileTextSearcher(ITextSearcher textSearcher) { this.textSearcher = textSearcher; }