/// <summary> /// Searches the entire ARC file using a fuzzy search. /// </summary> /// <param name="arcFile">The ARC to search</param> /// <param name="extractStartCallBack"></param> /// <param name="extractReportProgressCallBack"></param> /// <param name="extractEndCallBack"></param> /// <param name="searchText">The string to search for</param> /// <param name="mergeTrailingSlash"></param> /// <returns>The results sorted by matching score</returns> public static List <FileNodeBase> SearchAllNodes(ArcFile arcFile, Action <string, bool> extractStartCallBack, Action <string, double> extractReportProgressCallBack, Action <string> extractEndCallBack, string searchText, bool mergeTrailingSlash) { // TODO: The max result count has a big impact on performance and is worth tuning. var paths = arcFile.SearchFiles(searchText, 2000, ApplicationSettings.Instance.ArcRegion); var result = new List <FileNodeBase>((int)arcFile.FileCount); foreach (var path in paths) { var treeNode = CreateNodeFromPath(arcFile, path, extractStartCallBack, extractReportProgressCallBack, extractEndCallBack, mergeTrailingSlash); if (treeNode != null) { result.Add(treeNode); } } // Avoiding sorting by path to preserve the order based on matching score. return(result); }