/// <summary> /// Returns an enumerable collection of files (including full paths) that match a pattern in a specified path, /// and optionally searches subdirectories. /// </summary> /// <param name="directory">The directory to search.</param> /// <param name="searchPattern">Search pattern to match against files in the directory.</param> /// <param name="searchOption">Whether to search the top directory or subdirectories.</param> /// <returns>An enumerable of filenames including paths.</returns> public IEnumerable <string> EnumerateFiles(string directory, string searchPattern, SearchOption searchOption) { directory.ThrowIfNullOrWhiteSpace("directory"); searchPattern.ThrowIfNullOrWhiteSpace("searchPattern"); searchOption.ThrowIfInvalidEnumerand <SearchOption>("searchOption"); directory.ThrowIfDirectoryDoesNotExist("directory"); return(Directory.EnumerateFiles(directory, searchPattern, searchOption)); }
/// <summary> /// Returns an enumerable collection of files (including full paths) that match a pattern in a specified path, /// and optionally searches subdirectories. /// </summary> /// <param name="directory">The directory to search.</param> /// <param name="searchPattern">Search pattern to match against files in the directory.</param> /// <param name="searchOption">Whether to search the top directory or subdirectories.</param> /// <returns>An enumerable of filenames including paths.</returns> public IEnumerable <string> EnumerateFiles(string directory, string searchPattern, SearchOption searchOption) { directory.ThrowIfNullOrWhiteSpace("directory"); searchPattern.ThrowIfNullOrWhiteSpace("searchPattern"); searchOption.ThrowIfInvalidEnumerand <SearchOption>("searchOption"); if (!DirectoryExists(directory)) { throw new DirectoryNotFoundException("The directory " + directory + " does not exist."); } Regex regex = MakeRegexFromSearchPattern(searchPattern); var files = from filename in Files.Keys where filename.StartsWith(directory) && filename.Length > directory.Length && (searchOption == SearchOption.AllDirectories || FileIsDirectlyInDir(filename, directory)) && (searchPattern == "*" || (regex != null && regex.IsMatch(filename))) select filename; return(files); }