Example #1
0
        private void ProcessFilteredEntry(FileSystemInfoBase systemInfoBase, FilteredFileSystemInfoFound args)
        {
            var isDirectory = systemInfoBase.Attributes.HasFlag(FileAttributes.Directory);

            if (isDirectory)
            {
                FilteredDirectoryFound?.Invoke(systemInfoBase, args);
            }
            else
            {
                FilteredFileFound?.Invoke(systemInfoBase, args);
            }
        }
Example #2
0
        protected virtual void OnFilteredFileFound(FilteredContentFindedEventArgs e)
        {
            if (ReferenceEquals(e, null))
            {
                throw new ArgumentNullException();
            }

            FilteredFileFound?.Invoke(this, e);

            if (!_searchStopped)
            {
                _searchStopped = e.StopSearch;
            }

            _itemRemoved = e.RemoveItem;
        }
Example #3
0
        public FileSystemVisitor(string rootPath, Func <FileSystemInfo, bool> predicate)
            : this(rootPath)
        {
            _dirsAndFiles = _dirsAndFiles.Where(item => predicate(item)).ToList();

            _dirsAndFiles.ForEach(item =>
            {
                if ((item.Attributes & FileAttributes.Directory) == FileAttributes.Directory)
                {
                    FilteredDirectoryFound?.Invoke(this, new FilteredItemFoundEventArgs <DirectoryInfo>(item as DirectoryInfo));
                }
                else
                {
                    FilteredFileFound?.Invoke(this, new FilteredItemFoundEventArgs <FileInfo>(item as FileInfo));
                }
            });
        }
 private void OnFilteredFileFound(VisitArgs args)
 {
     FilteredFileFound.Run(this, args);
 }
Example #5
0
        private FileSystemInfoCustomCollection <CustomFileItem> GetItemsRecursively(string directoryPath, FilterMask filterMask)
        {
            var directoryInfo = (CustomDirectoryInfo)customDirectoryInfoFactory.CreateInstance(directoryPath);

            var output = new FileSystemInfoCustomCollection <CustomFileItem>();

            if (isFirstFilteredFileFound && filterMask.HasFlag(FilterMask.FirstOnly))
            {
                return(output);
            }

            if (!filterMask.HasFlag(FilterMask.NoFolders))
            {
                DirectoryFound?.Invoke(this, new ItemFoundArgs {
                    Item = directoryInfo
                });
                if (filterMask.HasFlag(FilterMask.IgnoreFilterFunction) || FileFilterDelegate.Invoke(directoryInfo))
                {
                    FilteredDirectoryFound?.Invoke(this, new ItemFoundArgs {
                        Item = directoryInfo
                    });
                    output.Add(directoryInfo);
                    isFirstFilteredFileFound = true;
                    if (isFirstFilteredFileFound && filterMask.HasFlag(FilterMask.FirstOnly))
                    {
                        return(output);
                    }
                }
            }

            var files = directoryInfo.GetFiles();

            foreach (var file in files)
            {
                FileFound?.Invoke(this, new ItemFoundArgs {
                    Item = file
                });
                if (filterMask.HasFlag(FilterMask.IgnoreFilterFunction) || FileFilterDelegate.Invoke(file))
                {
                    FilteredFileFound?.Invoke(this, new ItemFoundArgs {
                        Item = file
                    });
                    output.Add(file);
                    isFirstFilteredFileFound = true;
                    if (isFirstFilteredFileFound && filterMask.HasFlag(FilterMask.FirstOnly))
                    {
                        return(output);
                    }
                }
            }

            var directories = directoryInfo.GetDirectories();

            foreach (var directory in directories)
            {
                var result = GetItemsRecursively(directory.FullName, filterMask);
                foreach (var item in result)
                {
                    output.Add(item);
                }
            }

            return(output);
        }
 protected virtual void OnFilteredFileFound(ItemFoundInfoEventArgs e)
 {
     FilteredFileFound?.Invoke(this, e);
 }
Example #7
0
 protected virtual void OnFilteredFileFound(SystemVisitorEventArgs e)
 {
     FilteredFileFound?.Invoke(this, e);
     _isStop = e.IsStop;
     _isSkip = e.IsSkip;
 }
Example #8
0
 private void OnFilteredFileFound(PathEventArgs args)
 {
     FilteredFileFound?.Invoke(this, args);
 }
Example #9
0
 protected virtual void OnFilteredFileFound(FileEventArgs args)
 {
     FilteredFileFound?.Invoke(this, args);
 }
        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);
        }