private static IEnumerable <string> Search(string directory, string searchString, bool searchSubdirectories, bool caseSensitive, bool useRegex, bool searchInTitle) { var isMatch = useRegex ? new Predicate <string>(x => Regex.IsMatch(x, searchString, caseSensitive ? RegexOptions.None : RegexOptions.IgnoreCase)) : new Predicate <string>(x => x.IndexOf(searchString, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase) >= 0); var files = Directory.GetFiles(directory, "*.docx", searchSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly); foreach (var filePath in files) { string docxText = string.Empty; if (searchInTitle) { docxText = System.IO.Path.GetFileNameWithoutExtension(filePath); } else { try { using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { docxText = new DocxToStringConverter(stream).Convert(); } } catch (Exception) { } } if (!string.IsNullOrEmpty(docxText) && isMatch(docxText)) { yield return(filePath); } } }
private static IEnumerable <string> Search(string directory, string searchString, bool searchSubdirectories, bool caseSensitive, bool useRegex) { var isMatch = useRegex ? new Predicate <string>(x => Regex.IsMatch(x, searchString, caseSensitive ? RegexOptions.None : RegexOptions.IgnoreCase)) : new Predicate <string>(x => x.IndexOf(searchString, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase) >= 0); foreach (var filePath in Directory.GetFiles(directory, "*.docx", searchSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)) { string docxText; //Console.WriteLine(filePath); using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) docxText = new DocxToStringConverter(stream).Convert(); if (isMatch(docxText)) { yield return(filePath); } } }