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);
            }
        }
Beispiel #6
0
 public Query()
 {
     _fileSources  = new List <ISearchSource>();
     Filters       = new FileQueryFilterList();
     _excludePaths = new HashSet <string>();
 }
 public FileQueryFilterListEnumerator(FileQueryFilterList filterList)
 {
     _filterList = filterList;
     _enumerator = _filterList.Filters.GetEnumerator();
 }