private void TestFiles(FileInfo[] files, FileQueryFilterList filters) { foreach (FileInfo file in files) { if (abortSearch) { break; } TestFile(file, filters); } }
private void SearchResultSet(FileListSearchSource source, FileQueryFilterList filters) { foreach (var path in source.FilePaths) { if (abortSearch) { break; } var file = new FileInfo(path); if (file.Exists) { TestFile(file, filters); } else { throw new FileQueryException("File does not exist: " + file.FullName); } } }
private void TestFile(FileInfo file, FileQueryFilterList filters) { if (Logger.IsDebugEnabled) { Logger.Debug("Testing file: " + file); } bool accept = true; foreach (var filter in filters) { if (abortSearch || accept == false) { // No need to continue break; } // Apply the filter if (Logger.IsDebugEnabled) { Logger.Debug("Checking filter: " + filter.ToString()); } accept = filter.Accept(file); } if (accept) { if (Logger.IsDebugEnabled) { Logger.Debug("File passed all filters: " + file); } Results.Add(file); FileFound?.Invoke(this, new FileFoundEventArgs() { fileInfo = file }); } }
private void SearchDirectory(DirectoryInfo directory, bool recurse, HashSet <string> excludePaths, FileQueryFilterList filters) { if (!excludePaths.Contains(directory.FullName.ToLower())) { if (abortSearch) { return; } if (Logger.IsDebugEnabled) { Logger.Debug("Searching directory: " + directory); } try { // File name filter is a special case that can be done much faster here if (filters.SimpleFileNameFilter != null) { if (Logger.IsDebugEnabled) { Logger.Debug("Using simple file filter: " + filters.SimpleFileNameFilter.Pattern); } TestFiles(directory.GetFiles(filters.SimpleFileNameFilter.Pattern), filters); } else { // Can't use simple filter, get all files TestFiles(directory.GetFiles(), filters); } if (recurse) { foreach (DirectoryInfo child in directory.GetDirectories()) { SearchDirectory(child, recurse, excludePaths, filters); } } } catch (FileQueryAbortedException) { // Kick it to the curb throw; } catch (Exception ex) { if (Logger.IsDebugEnabled) { Logger.Debug(ex.ToString()); } } } }
/// <summary> /// Searching a directory starts here /// </summary> /// <param name="path"></param> /// <param name="query"></param> private void SearchDirectory(DirectorySearchSource source, HashSet <string> excludePaths, FileQueryFilterList filters) { var dir = new DirectoryInfo(source.Path); if (dir.Exists) { SearchDirectory(dir, source.IsRecursive, excludePaths, filters); } else { throw new FileQueryException("Directory does not exist: " + source.Path); } }
public Query() { _fileSources = new List <ISearchSource>(); Filters = new FileQueryFilterList(); _excludePaths = new HashSet <string>(); }
public FileQueryFilterListEnumerator(FileQueryFilterList filterList) { _filterList = filterList; _enumerator = _filterList.Filters.GetEnumerator(); }