public static List <DAL.File> Search(string directory, string searchString) { bool searchSubdirectories = true; bool caseSensitive = true; bool useRegex = true; string docxText = null; List <DAL.File> searchfiles = new List <DAL.File>(); var isMatch = useRegex ? new Predicate <string>(x => Regex.IsMatch(x, searchString)) : new Predicate <string>(x => x.IndexOf(searchString, caseSensitive ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase) >= 0); // TODO rekorsive to all the directories in this directory foreach (var filePath in Directory.GetFiles(directory, "*.docx", searchSubdirectories ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly)) { FileStream stream = null; using (stream = System.IO.File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { if (stream.Length == 0) { continue; } docxText = new DocxToStringConverter(stream).Convert(); } if (isMatch(docxText)) { using (DBcomfilerEntities context = new DBcomfilerEntities()) { string idFile = stream.Name.Substring(stream.Name.Length - 41).ToString(); string id = idFile.Remove(idFile.Length - 5); DAL.File file = context.Files.FirstOrDefault(x => x.ID == id); searchfiles.Add(file); } } } return(searchfiles); }
public static List <CollecumentData.File> SearchTextInFile(string keyword) { //FileStream inFile = new FileStream(@"E:\Documents\Hello.docx", FileMode.Open, FileAccess.Read); string directory = @"E:\Documents\GitHub\ColleCument\files"; string searchString = keyword; bool searchSubdirectories = true; bool caseSensitive = true; bool useRegex = false; List <CollecumentData.File> searchfiles = new List <CollecumentData.File>(); string docxText = null; 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)) { using (var stream = System.IO.File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { if (stream.Length == 0) { continue; } docxText = new DocxToStringConverter(stream).Convert(); { if (isMatch(docxText)) { using (DBCollecumentEntities context = new DBCollecumentEntities()) { string idFile = stream.Name.Substring(stream.Name.Length - 41).ToString(); string id = idFile.Remove(idFile.Length - 5); CollecumentData.File file = context.Files.FirstOrDefault(x => x.ID == id); searchfiles.Add(file); } } } } } return(searchfiles); }