/// <inheritdoc />
        public List <string> ValueFor(string initialDirectory, FileListFromPathFilter fileListFromPathFilter)
        {
            if (initialDirectory == null)
            {
                throw new ArgumentNullException(nameof(initialDirectory));
            }

            if (fileListFromPathFilter == null)
            {
                throw new ArgumentNullException(nameof(fileListFromPathFilter));
            }

            var fileList = new ConcurrentBag <string>();

            if (initialDirectory.IsAccessible())
            {
                //root directory.
                var initialDirectoryFileList = Directory.GetFiles(initialDirectory).Select(item => item.ToLower()).ToList();
                var dirList = initialDirectoryFileList.Where(file => IsValidFileName(file, fileList, fileListFromPathFilter)).ToList();
                //sub directories.
                var initialDirectorySubdirectoriesFileList = GetSubdirectoriesContainingOnlyFiles(initialDirectory).SelectMany(Directory.GetFiles).Select(item => item.ToLower());
                var dirSubList = initialDirectorySubdirectoriesFileList.Where(file => IsValidFileName(file, fileList, fileListFromPathFilter)).ToList();

                var processList = new List <string>();
                processList.AddRange(dirList);
                processList.AddRange(dirSubList);

                _multiThreading.RunFor(processList,
                                       range => Parallel.For(range.Item1, range.Item2,
                                                             i => { fileList.Add(processList[i]); }));
            }

            return(fileList.ToList());
        }
Пример #2
0
    /// <inheritdoc />
    public bool FileSystemEntryIsValid(FileSystemEntry entry, [NotNull] FileListFromPathFilter fileListFromPathFilter)
    {
        if (fileListFromPathFilter == null)
        {
            throw new ArgumentNullException(nameof(fileListFromPathFilter));
        }

        var includeExtensionList = fileListFromPathFilter.FilterExtensionsToEqual;
        var excludeExtensionList = fileListFromPathFilter.FilterExtensionsNotToEqual;
        var includeFileNameList  = fileListFromPathFilter.FilterFileNamesToEqual;
        var excludeFileNameList  = fileListFromPathFilter.FilterFileNamesNotToEqual;

        var fileName      = entry.FileName.ToString();
        var fileExtension = Path.GetExtension(entry.ToFullPath()).TrimStart('.');

        var hasFileExtension = !string.IsNullOrWhiteSpace(fileExtension);

        //!Any() => all allowed; else => list has to contain extension, name or path
        var includeExtension = !includeExtensionList.Any() || includeExtensionList.Contains(fileExtension);
        var includeFileName  = !includeFileNameList.Any() || includeFileNameList.Contains(fileName);

        // .docx
        var excludeExtension =
            excludeExtensionList.Contains(fileExtension, StringComparer.OrdinalIgnoreCase);
        // ...file.x
        var excludeFileName =
            excludeFileNameList.Any(p => fileName.Contains(p, StringComparison.OrdinalIgnoreCase));

        return(hasFileExtension && includeExtension && !excludeExtension && includeFileName && !excludeFileName);
    }
Пример #3
0
    /// <exception cref="ArgumentNullException"></exception>
    /// <inheritdoc />
    public List <string> ValueFor([NotNull] string initialDirectory,
                                  [NotNull] FileListFromPathFilter fileListFromPathFilter)
    {
        if (initialDirectory == null)
        {
            throw new ArgumentNullException(nameof(initialDirectory));
        }

        if (fileListFromPathFilter == null)
        {
            throw new ArgumentNullException(nameof(fileListFromPathFilter));
        }

        var enumeration = new FileSystemEnumerable <string>(
            initialDirectory,
            (ref FileSystemEntry entry) => entry.ToFullPath(),
            new()
        {
            RecurseSubdirectories = true,
            MatchCasing           = MatchCasing.CaseInsensitive,
            IgnoreInaccessible    = true
        })
        {
            ShouldIncludePredicate = (ref FileSystemEntry entry) => !entry.IsDirectory && FileSystemEntryIsValid(entry, fileListFromPathFilter)
        };

        return(enumeration.Distinct(StringComparer.OrdinalIgnoreCase).ToList());
    }
Пример #4
0
        /// <inheritdoc />
        public List <string> ValueFor([NotNull] string initialDirectory, [NotNull] FileListFromPathFilter fileListFromPathFilter)
        {
            if (initialDirectory == null)
            {
                throw new ArgumentNullException(nameof(initialDirectory));
            }

            _fileList = new ConcurrentBag <string>();
            _fileListFromPathFilter = fileListFromPathFilter ?? throw new ArgumentNullException(nameof(fileListFromPathFilter));

            if (!initialDirectory.IsAccessible())
            {
                return(_fileList.ToList());
            }

            //root directory.
            var initialDirectoryFileList = Directory.GetFiles(initialDirectory).Select(item => item.ToLower()).ToList();
            var dirList = initialDirectoryFileList.Where(FileIsValid).ToList();
            //sub directories.
            var initialDirectorySubdirectoriesFileList = GetSubdirectoriesContainingOnlyFiles(initialDirectory).SelectMany(Directory.GetFiles).Select(item => item.ToLower());
            var dirSubList = initialDirectorySubdirectoriesFileList.Where(FileIsValid).ToList();

            _fileList.AddRange(dirList);
            _fileList.AddRange(dirSubList);

            return(_fileList.ToList());
        }
    public void ValueFor_WithFilters_Result(
        FileListFromPath sut)
    {
        // Arrange
        var filePathFilter = new FileListFromPathFilter
        {
            FilterExtensionsToEqual = new List <string>
            {
                "txt"
            }
        };

        // Act
        var result = sut.ValueFor(@"C:\temp", filePathFilter);

        // Assert
        result.Should().HaveCount(5);
    }
        private bool IsValidFileName(string file, ConcurrentBag <string> fileList, FileListFromPathFilter fileListFromPathFilter)
        {
            if (file == null)
            {
                throw new ArgumentNullException(nameof(file));
            }

            if (fileList == null)
            {
                throw new ArgumentNullException(nameof(fileList));
            }

            var includeExtensionList = fileListFromPathFilter.FilterExtensionsToEqual;
            var excludeExtensionList = fileListFromPathFilter.FilterExtensionsNotToEqual;
            var includeFileNameList  = fileListFromPathFilter.FilterFileNamesToEqual;
            var excludeFileNameList  = fileListFromPathFilter.FilterFileNamesNotToEqual;
            var includeFilePathList  = fileListFromPathFilter.FilterFilePathsToEqual;
            var excludeFilePathList  = fileListFromPathFilter.FilterFilePathsNotToEqual;

            var path          = file.ToLower();
            var fileInfo      = new FileInfo(file);
            var fileName      = fileInfo.Name.ToLower();
            var fileExtension = fileInfo.Extension.ToLower().TrimStart('.');

            var alreadyContained = !fileList.Contains(file);
            var hasFileExtension = !string.IsNullOrWhiteSpace(fileExtension);

            //!Any() => all allowed; else => list has to contain extension, name or path
            var includeExtention = includeExtensionList == null || !includeExtensionList.Any() || includeExtensionList.Contains(fileExtension);
            var includeFileName  = includeFileNameList == null || !includeFileNameList.Any() || includeFileNameList.Contains(fileName);
            var includeFilePath  = includeFilePathList == null || !includeFilePathList.Any() || includeFilePathList.Contains(path);

            // .docx
            var excludeExtention = excludeExtensionList != null && excludeExtensionList.Contains(fileExtension, StringComparer.InvariantCultureIgnoreCase);
            // ...file.x
            var excludeFileName = excludeFileNameList != null && excludeFileNameList.Any(p => fileName.Contains(p, StringComparison.InvariantCultureIgnoreCase));
            // C:\Temp\...
            var excludeFilePath = excludeFilePathList != null && excludeFilePathList.Any(p => path.Contains(p, StringComparison.InvariantCultureIgnoreCase));

            return(alreadyContained && hasFileExtension && includeExtention && !excludeExtention && includeFileName && !excludeFileName && includeFilePath && !excludeFilePath);
        }
        public void ValueFor_WithFilters_Result(
            FileListFromPath sut)
        {
            // Arrange

            var excludeExtensionList = new List <string>
            {
                "ics",
                "sam"
            };

            var excludeFileNameList = new List <string>
            {
                "listfilesbydate_log_"
            };

            var includeFilePaths = new List <string>
            {
                "mach2_0.3.0.0_x64"
            };

            var excludeFilePaths = new List <string>
            {
                "sdk"
            };

            var filePathFilter = new FileListFromPathFilter
            {
                FilterExtensionsNotToEqual = excludeExtensionList,
                FilterFileNamesNotToEqual  = excludeFileNameList,
                FilterFilePathsToEqual     = includeFilePaths,
                FilterFilePathsNotToEqual  = excludeFilePaths
            };

            // Act
            var result = sut.ValueFor(@"C:\temp", filePathFilter);

            // Assert
            result.Should().HaveCount(8);
        }