protected bool ScanDirByPattern(string dir, bool IsPrimary, DiscoverySearchPattern[] patterns) { DirectoryInfo physicalDir = this.GetPhysicalDir(dir); if (physicalDir == null) { return false; } bool traceVerbose = System.ComponentModel.CompModSwitches.DynamicDiscoverySearcher.TraceVerbose; bool flag = false; for (int i = 0; i < patterns.Length; i++) { foreach (FileInfo info2 in physicalDir.GetFiles(patterns[i].Pattern)) { if ((info2.Attributes & FileAttributes.Directory) == 0) { bool flag2 = System.ComponentModel.CompModSwitches.DynamicDiscoverySearcher.TraceVerbose; if (string.Compare(info2.Name, this.fileToSkipFirst, StringComparison.OrdinalIgnoreCase) != 0) { string str = this.MakeResultPath(dir, info2.Name); this.filesFound.Add(str); this.discoDoc.References.Add(patterns[i].GetDiscoveryReference(str)); flag = true; } } } } return (IsPrimary && flag); }
// ------------------------------------------------------------------------------- // Invokes searching by patterns in current dir. If needed, initiates further search in subdirectories. protected void ScanDirectory(string directory) { if (CompModSwitches.DynamicDiscoverySearcher.TraceVerbose) { Debug.WriteLine("DynamicDiscoSearcher.ScanDirectory(): directory=" + directory); } if (IsExcluded(directory)) // what name is meant here? { return; } bool primaryFound = ScanDirByPattern(directory, true /*primary*/, PrimarySearchPattern); if (!primaryFound) { if (!IsVirtualSearch) { ScanDirByPattern(directory, false /*secondary*/, SecondarySearchPattern); } else { // We restrict second stage of a virtual discovery only to static .disco documents // We assume that starting directory does not need a second stage if (subDirLevel != 0) { DiscoverySearchPattern[] staticDiscoPattern = new DiscoverySearchPattern[] { new DiscoveryDocumentLinksPattern() }; ScanDirByPattern(directory, false /*secondary*/, staticDiscoPattern); } } if (IsVirtualSearch && subDirLevel > 0) { return; // stop search in subdir levels deeper than 1 for virtual search } subDirLevel++; fileToSkipFirst = ""; // do not skip this file on lower levels SearchSubDirectories(directory); // search deeper (indirect recursion) subDirLevel--; } }
protected void ScanDirectory(string directory) { bool traceVerbose = System.ComponentModel.CompModSwitches.DynamicDiscoverySearcher.TraceVerbose; if (!this.IsExcluded(directory) && !this.ScanDirByPattern(directory, true, this.PrimarySearchPattern)) { if (!this.IsVirtualSearch) { this.ScanDirByPattern(directory, false, this.SecondarySearchPattern); } else if (this.subDirLevel != 0) { DiscoverySearchPattern[] patterns = new DiscoverySearchPattern[] { new DiscoveryDocumentLinksPattern() }; this.ScanDirByPattern(directory, false, patterns); } if (!this.IsVirtualSearch || (this.subDirLevel <= 0)) { this.subDirLevel++; this.fileToSkipFirst = ""; this.SearchSubDirectories(directory); this.subDirLevel--; } } }
// ------------------------------------------------------------------------------- // Looks in a physical directory for a file matching whatever the configured pattern is. // Returns: 'true' if primary file has been found (and added to Discovery References). protected bool ScanDirByPattern(string dir, bool IsPrimary, DiscoverySearchPattern[] patterns) { DirectoryInfo directory = GetPhysicalDir(dir); // comment here if ( directory == null ) return false; if ( CompModSwitches.DynamicDiscoverySearcher.TraceVerbose ) Debug.WriteLine( "= DynamicDiscoSearcher.ScanDirByPattern(): dir=" + dir + " Phys.dir=" + directory.Name); bool isFileFound = false; for (int i = 0; i < patterns.Length; i++) { FileInfo[] files = directory.GetFiles(patterns[i].Pattern); // search in dir foreach (FileInfo file in files) { if ((file.Attributes & FileAttributes.Directory) == 0) { if ( CompModSwitches.DynamicDiscoverySearcher.TraceVerbose ) Debug.WriteLine( "=== DynamicDiscoSearcher.ScanDirByPattern(): file.Name=" + file.Name + " fileToSkipFirst=" + fileToSkipFirst); // first skip given (i.e. starting) file if ( String.Compare(file.Name, fileToSkipFirst, StringComparison.OrdinalIgnoreCase) == 0 ) { // ignore case compare continue; } string resultName = MakeResultPath(dir, file.Name); filesFound.Add( resultName ); discoDoc.References.Add(patterns[i].GetDiscoveryReference(resultName)); isFileFound = true; } } } return (IsPrimary && isFileFound); }
// ------------------------------------------------------------------------------- // Invokes searching by patterns in current dir. If needed, initiates further search in subdirectories. protected void ScanDirectory(string directory) { if ( CompModSwitches.DynamicDiscoverySearcher.TraceVerbose ) Debug.WriteLine( "DynamicDiscoSearcher.ScanDirectory(): directory=" + directory); if ( IsExcluded(directory) ) // what name is meant here? return; bool primaryFound = ScanDirByPattern(directory, true /*primary*/, PrimarySearchPattern); if (!primaryFound) { if (!IsVirtualSearch ) { ScanDirByPattern(directory, false /*secondary*/, SecondarySearchPattern); } else { // We restrict second stage of a virtual discovery only to static .disco documents // We assume that starting directory does not need a second stage if (subDirLevel != 0) { DiscoverySearchPattern[] staticDiscoPattern = new DiscoverySearchPattern[] { new DiscoveryDocumentLinksPattern() }; ScanDirByPattern(directory, false /*secondary*/, staticDiscoPattern); } } if ( IsVirtualSearch && subDirLevel > 0 ) return; // stop search in subdir levels deeper than 1 for virtual search subDirLevel++; fileToSkipFirst = ""; // do not skip this file on lower levels SearchSubDirectories(directory); // search deeper (indirect recursion) subDirLevel--; } }