This example shows how to get list of file names from a directory (including subdirectories) using multiple include- and exclude patterns.
The buildin method System.IO.Directory.GetFiles can handle only one include pattern and no exclude pattern and multiple patterns a definitely out of the question.
So I had to write a little helper method using LINQ to do the trick!
/// <summary> /// Get the files from the specified path, including subdirectories, which match the specified pattern. /// Note: To specified multiple patterns, separate them by a semicolumn (;) /// </summary> /// <param name="path">The path.</param> /// <param name="includePatterns">An array of include patterns. Using wildcards.</param> /// <param name="excludePatterns">An array of exclude patterns. Using Regular expressions.</param> /// <returns>Returns an array of filenames.</returns> public static string[] GetFiles(string path, string[] includePatterns, string[] excludePatterns) { if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException("path", "Argument should not be NULL or an empty string."); } if (includePatterns == null) { includePatterns = new string[0]; } if (excludePatterns == null) { excludePatterns = new string[0]; } var files = from includePattern in includePatterns from includeFile in Directory.GetFiles(path, includePattern, SearchOption.AllDirectories) from excludePattern in excludePatterns.DefaultIfEmpty() where excludePattern == null || !Regex.IsMatch(includeFile, excludePattern, RegexOptions.IgnoreCase) select includeFile; return files.ToArray(); }
The following example gets all files that match the wildcard patterns 'DdH.*.Helpers.dll' & 'DdH.*.exe' from the c:\temp directory, but will exclude all files that match the regular expression 'Tests\.dll'.
string[] fileNames = GetFiles(@"c:\temp", new string[] { "DdH.Helpers.*.dll", "DdH.*.exe" }, new string[] { "Tests\.dll" });