private IEnumerable <string> EnumerateFilesInFolder(string targetDirectory) { var fileEntries = Directory.GetFiles(targetDirectory); foreach (var file in fileEntries) { FileFinded?.Invoke(); if (_filterPattern.Invoke(file)) { FilteredFileFinded?.Invoke(); } yield return(file); } var subdirectoryEntries = Directory.GetDirectories(targetDirectory); foreach (string subdirectory in subdirectoryEntries) { DirectoryFinded?.Invoke(); if (_filterPattern.Invoke(subdirectory)) { FilteredDirectoryFinded?.Invoke(); } foreach (var file in EnumerateFilesInFolder(subdirectory) .TakeWhile(file => !_cancelTokenSource.IsCancellationRequested) .ToList()) { yield return(file); } } }
//перебирает файлы private IEnumerable <CatalogItem> FindFiles(FileInfo[] files) { foreach (var file in files) { //если алгоритм фильтрации задан if (MyFilter != null) { if (MyFilter(file)) { fileArgs.Extention = file.Extension; FilteredFileFinded?.Invoke(this, fileArgs); yield return(new CatalogItem { Name = file.Name, NestingLevel = nestingLevel, Item = CatalogItems.File }); } } else { fileArgs.Extention = file.Extension; FileFinded?.Invoke(this, fileArgs); yield return(new CatalogItem { Name = file.Name, NestingLevel = nestingLevel, Item = CatalogItems.File }); } } }
private DirectoryEntityCollection FilterFiles(DirectoryEntityCollection collection) { collection.Files = _filterAction?.Invoke(collection.Files) ?? collection.Files; for (var i = 0; i < collection.SubEntities.Length; i++) { collection.SubEntities[i] = FilterFiles(collection.SubEntities[i]); } FilteredFileFinded?.Invoke(ref args); if (args.RemoveDirectories.Any()) { collection.RemoveFolder(args.RemoveDirectories); } if (args.RemoveFiles.Any()) { collection.RemoveFiles(args.RemoveFiles); } if (args.StopSearching) { return(collection); } return(collection); }
protected virtual void OnFileFinded(FileInfo fileInfo, bool isFiltered = false) { var arg = new ItemFindedArg <FileSystemInfo>(fileInfo); _argList.Add(arg); if (isFiltered) { FilteredFileFinded?.Invoke(this, arg); } else { FileFinded?.Invoke(this, arg); } }
protected virtual void OnFilteredFileFinded(FileSystemEventArgs args) { FilteredFileFinded?.Invoke(this, args); }
protected virtual void OnFilteredFileFinded(string path) //запуск события после фильтрации { FilteredFileFinded?.Invoke(path); Console.WriteLine(path); }