/// <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()); }
/// <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); }
/// <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()); }
/// <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); }