private void ApplyEventArgsChanges(FileSystemVisitorEventArgs args) { switch (args.State) { case FileSystemVisitorEventArgsStates.None: break; case FileSystemVisitorEventArgsStates.StopOnFirstFindedCoincidence: this.action = FileSystemVisitorAction.Interrupt; break; case FileSystemVisitorEventArgsStates.IgnoreThisEntry: this.action = FileSystemVisitorAction.Ignore; break; default: throw new ArgumentOutOfRangeException(nameof(args.State), args.State, "FileSystemVisitorEventArgs state is out of range"); } }
private IEnumerable <FileSystemInfo> HandleEntries(IEnumerable <FileSystemInfo> entries) { foreach (var entry in entries) { if (this.action.HasFlag(FileSystemVisitorAction.Ignore)) { this.action ^= FileSystemVisitorAction.Ignore; } if (this.action.HasFlag(FileSystemVisitorAction.Interrupt)) { break; } DirectoryInfo directoryInfo = entry as DirectoryInfo; FileInfo fileInfo = entry as FileInfo; bool isPassed = this.Filter(entry); if (directoryInfo != null) { this.InvokeConsiderFilter(this.DirectoryFound, this, new FileSystemVisitorEventArgs { Message = directoryInfo.FullName, Value = directoryInfo, }); if (isPassed) { this.InvokeConsiderFilter(this.FilteredDirectoryFound, this, new FileSystemVisitorEventArgs { Message = directoryInfo.FullName, Value = directoryInfo, }); if (this.action == FileSystemVisitorAction.Ignore) { continue; } yield return(entry); } } if (fileInfo != null) { this.InvokeConsiderFilter(this.FileFound, this, new FileSystemVisitorEventArgs { Message = fileInfo.FullName, Value = fileInfo, }); if (isPassed) { this.InvokeConsiderFilter(this.FilteredFileFound, this, new FileSystemVisitorEventArgs { Message = fileInfo.FullName, Value = fileInfo, }); if (this.action == FileSystemVisitorAction.Ignore) { continue; } yield return(entry); } } } }
public FileSystemVisitor(Func <FileSystemInfo, bool> filter) { this.Filter = filter; this.action = FileSystemVisitorAction.None; }