示例#1
0
        private IEnumerable <string> EnumerateFilesInFolder(string targetDirectory)
        {
            var fileEntries = Directory.GetFiles(targetDirectory);

            foreach (var file in fileEntries)
            {
                FileFinded?.Invoke();
                if (_filterPattern.Invoke(file))
                {
                    FilteredFileFinded?.Invoke();
                }

                yield return(file);
            }

            var subdirectoryEntries = Directory.GetDirectories(targetDirectory);

            foreach (string subdirectory in subdirectoryEntries)
            {
                DirectoryFinded?.Invoke();
                if (_filterPattern.Invoke(subdirectory))
                {
                    FilteredDirectoryFinded?.Invoke();
                }

                foreach (var file in EnumerateFilesInFolder(subdirectory)
                         .TakeWhile(file => !_cancelTokenSource.IsCancellationRequested)
                         .ToList())
                {
                    yield return(file);
                }
            }
        }
示例#2
0
        private IEnumerable <FileSystemInfo> ScanDir(DirectoryInfo dir, int level)
        {
            if (_breakNexStep)
            {
                yield break;
            }

            DirectoryFinded?.Invoke(dir, _logService);
            yield return(dir);

            FileInfo[] files = _workTree.GetFiles(dir);

            foreach (FileInfo f in files)
            {
                if (_breakNexStep)
                {
                    yield break;
                }
                FileFinded?.Invoke(f, _logService);
                yield return(f);
            }

            DirectoryInfo[] subDirs = _workTree.GetDirectories(dir);

            foreach (DirectoryInfo d in subDirs)
            {
                foreach (var s in ScanDir(d, ++level))
                {
                    yield return(s);
                }
            }
        }
示例#3
0
        private DirectoryEntityCollection GetDirectories(string path)
        {
            var result = new DirectoryEntityCollection();

            result.Directories = _systemEntityService.GetDirectories(path);

            var subFolders = new List <DirectoryEntityCollection>();

            if (result.Directories.Length > 0)
            {
                foreach (var item in result.Directories)
                {
                    subFolders.Add(GetDirectories(item));
                }
            }

            result.SubEntities = subFolders.ToArray();

            DirectoryFinded?.Invoke(ref args);
            if (args.RemoveDirectories.Any())
            {
                result.RemoveFolder(args.RemoveDirectories);
            }
            if (args.RemoveFiles.Any())
            {
                result.RemoveFiles(args.RemoveFiles);
            }
            if (args.StopSearching)
            {
                return(result);
            }

            return(result);
        }
示例#4
0
 private void CallEventDirectoryFound()
 {
     if (filtered)
     {
         FilteredDirectoryFinded?.Invoke(this, directoryArgs);
     }
     else
     {
         DirectoryFinded?.Invoke(this, directoryArgs);
     }
 }
        protected virtual void OnDirectoryFinded(DirectoryInfo directoryInfo, bool isFiltered = false)
        {
            var arg = new ItemFindedArg <FileSystemInfo>(directoryInfo);

            _argList.Add(arg);

            if (isFiltered)
            {
                FilteredDirectoryFinded?.Invoke(this, arg);
            }

            else
            {
                DirectoryFinded?.Invoke(this, arg);
            }
        }
        public IEnumerable <FileSystemInfo> GetAll(string rootPath)
        {
            if (rootPath == null || !Directory.Exists(rootPath))
            {
                throw new ArgumentException(nameof(rootPath));
            }
            Start?.Invoke();
            try
            {
                foreach (var item in GetSystemElements(rootPath))
                {
                    if (_predicate?.Invoke(item) ?? false)
                    {
                        yield return(item);

                        yield break;
                    }
                    if (item is DirectoryInfo)
                    {
                        DirectoryFinded?.Invoke(this, new FileSystemVisitorEventArgs()
                        {
                            Name = item.Name, FullPath = item.FullName
                        });
                    }
                    else
                    {
                        FileFinded?.Invoke(this, new FileSystemVisitorEventArgs()
                        {
                            Name = item.Name, FullPath = item.FullName
                        });
                    }
                    yield return(item);
                }
            }
            finally
            {
                Stop?.Invoke();
            }
        }
 protected virtual void OnDirectoryFinded(FileSystemEventArgs args)
 {
     DirectoryFinded?.Invoke(this, args);
 }
示例#8
0
        private void TraverseTree(IDirectoryInfo directory)
        {
            Stack <IDirectoryInfo> dirs = new Stack <IDirectoryInfo>();

            if (!directory.Exists)
            {
                throw new ArgumentException();
            }
            else
            {
                _subDirsAll.Add(directory);
                dirs.Push(directory);
                DirectoryFinded?.Invoke(directory.FullName);
            }

            while (dirs.Count > 0)
            {
                IDirectoryInfo   currentDir = dirs.Pop();
                IDirectoryInfo[] subDirs;

                try
                {
                    subDirs = currentDir.GetDirectories();
                    foreach (IDirectoryInfo dir in subDirs)
                    {
                        _subDirsAll.Add(dir);
                        dirs.Push(dir);

                        if (DirectoryFinded != null && DirectoryFinded.Invoke(dir.FullName))
                        {
                            return;
                        }
                    }
                }

                catch (UnauthorizedAccessException e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }
                catch (DirectoryNotFoundException e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }

                FileInfo[] files = null;

                try
                {
                    files = currentDir.GetFiles();
                }

                catch (UnauthorizedAccessException e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }

                catch (DirectoryNotFoundException e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }

                foreach (FileInfo file in files)
                {
                    _files.Add(file);
                    if (FileFinded != null && FileFinded.Invoke(file.FullName))
                    {
                        return;
                    }
                }
            }
        }
示例#9
0
 protected virtual void OnDirectoryFinded(string path) //запуск события до фильтрации
 {
     DirectoryFinded?.Invoke(path);
     Console.WriteLine(path);
 }