Пример #1
0
 protected override void FileVisitorOnFolderFound(object sender, FolderNodeFindEvent e)
 {
     if (e.Folder.Name == "folder2")
     {
         //e.StopSearch = true;
     }
 }
Пример #2
0
        private bool VisitFolder(DirectoryInfo dirInfo, FolderNode rootNode = null)
        {
            if (_searchIsStopped)
            {
                return(false);
            }

            var folder = Map(dirInfo, rootNode);

            if (rootNode == null)
            {
                _rootNode = folder;
            }

            var childFilterResult = false;

            foreach (var item in dirInfo.EnumerateFileSystemInfos())
            {
                var validChild = VisitFileSystemInfo(folder, item);
                if (_searchIsStopped)
                {
                    if (validChild)
                    {
                        rootNode?.Add(folder);
                    }
                    return(false);
                }
                childFilterResult = childFilterResult || validChild;
            }

            var filterResult = _filterBy == null ? true : _filterBy.Invoke(folder);

            if (filterResult || childFilterResult)
            {
                var fEvent = new FolderNodeFindEvent(folder);
                FolderFound?.Invoke(this, fEvent);
                ProcessEvent(rootNode, folder, fEvent);
                return(fEvent.ShouldBeAdd);
            }

            return(false);
        }
Пример #3
0
        private bool TryToAddChildNodes(FolderNode root, Predicate <FileSystemNode> predicate, LinkedList <FileSystemNode> list)
        {
            var isChildAccording = false;

            foreach (var node in root)
            {
                if (_shoudBeStopped)
                {
                    throw new StopException();
                }

                var predicateResult = predicate(node);
                switch (node)
                {
                case FileNode file:
                {
                    if (predicateResult)
                    {
                        var ev = new FileNodeFindEvent(file);
                        FilteredFileFound?.Invoke(this, ev);

                        if (ev.ShouldBeAdd)
                        {
                            list.AddLast(file);
                            isChildAccording = true;
                            _shoudBeStopped  = ev.StopSearch;
                        }
                    }
                    break;
                }

                case FolderNode folder:
                {
                    var lastNode = list.Last;

                    if (TryToAddChildNodes(folder, predicate, list) || predicateResult)
                    {
                        var ev = new FolderNodeFindEvent(folder);
                        FilteredFolderFound?.Invoke(this, ev);

                        if (ev.ShouldBeAdd)
                        {
                            if (lastNode != null)
                            {
                                list.AddAfter(lastNode, folder);
                            }
                            else if (list.Count > 0)
                            {
                                list.AddFirst(folder);
                            }
                            else
                            {
                                list.AddLast(folder);
                            }
                            isChildAccording = true;
                            _shoudBeStopped  = ev.StopSearch;
                        }
                    }
                }
                break;
                }
            }
            return(isChildAccording);
        }