public List <File> GetFiles(IFileSource.IDirectory current, bool recursive, FileInfoBase[] fileTypes) { Directory? currentDir = current as Directory; List <File> results = new List <File>(); HashSet <string> validExtensions = new HashSet <string>(); foreach (FileInfoBase info in fileTypes) { validExtensions.Add("." + info.Extension); } if (currentDir != null) { SearchOption op = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; string[] filePaths = Directories.GetFiles(currentDir.Path, "*.*", op); foreach (string filePath in filePaths) { try { string extension = Paths.GetExtension(filePath); if (!validExtensions.Contains(extension)) { continue; } FileInfoBase info = FileService.GetFileInfo(extension); File file = new File(filePath, info, this); file.Metadata = info.GetMetadata(file); results.Add(file); } catch (Exception ex) { Log.Error(ex, "Failed to get file information"); } } } return(results); }