コード例 #1
0
        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");
            }
        }
コード例 #2
0
        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);
                    }
                }
            }
        }
コード例 #3
0
 public FileSystemVisitor(Func <FileSystemInfo, bool> filter)
 {
     this.Filter = filter;
     this.action = FileSystemVisitorAction.None;
 }