예제 #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 <CatalogItem> FindFiles(FileInfo[] files)
 {
     foreach (var file in files)
     {
         //если алгоритм фильтрации задан
         if (MyFilter != null)
         {
             if (MyFilter(file))
             {
                 fileArgs.Extention = file.Extension;
                 FilteredFileFinded?.Invoke(this, fileArgs);
                 yield return(new CatalogItem {
                     Name = file.Name, NestingLevel = nestingLevel, Item = CatalogItems.File
                 });
             }
         }
         else
         {
             fileArgs.Extention = file.Extension;
             FileFinded?.Invoke(this, fileArgs);
             yield return(new CatalogItem {
                 Name = file.Name, NestingLevel = nestingLevel, Item = CatalogItems.File
             });
         }
     }
 }
예제 #3
0
        private DirectoryEntityCollection FilterFiles(DirectoryEntityCollection collection)
        {
            collection.Files = _filterAction?.Invoke(collection.Files) ?? collection.Files;

            for (var i = 0; i < collection.SubEntities.Length; i++)
            {
                collection.SubEntities[i] = FilterFiles(collection.SubEntities[i]);
            }

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

            return(collection);
        }
        protected virtual void OnFileFinded(FileInfo fileInfo, bool isFiltered = false)
        {
            var arg = new ItemFindedArg <FileSystemInfo>(fileInfo);

            _argList.Add(arg);

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

            else
            {
                FileFinded?.Invoke(this, arg);
            }
        }
 protected virtual void OnFilteredFileFinded(FileSystemEventArgs args)
 {
     FilteredFileFinded?.Invoke(this, args);
 }
예제 #6
0
 protected virtual void OnFilteredFileFinded(string path) //запуск события после фильтрации
 {
     FilteredFileFinded?.Invoke(path);
     Console.WriteLine(path);
 }