protected override void FileVisitorOnFolderFound(object sender, FolderNodeFindEvent e) { if (e.Folder.Name == "folder2") { //e.StopSearch = true; } }
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); }
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); }