private void InitializeFileSystemMonitor() { FileSystemMonitor fsw = FileSystemMonitor.GetInstance(); foreach (string drive in Environment.GetLogicalDrives()) { fsw.AddMonitor(drive); } fsw.StartAllMonitors(); }
internal void StartCrawler() { // install the scheduler in a separate thread new Thread(delegate() { #if Log Console.WriteLine("Initiating Resource Scheduler in file system crawler"); #endif Scheduler(); }).Start(); //Start the crawler in the current thread #if Log Console.WriteLine("Initiating file system Crawler"); #endif long start = DateTime.Now.Ticks; foreach (string drive in GlobalData.Drives) { DriveInfo di = new DriveInfo(drive); if (di.IsReady && di.DriveType == DriveType.Fixed && GlobalData.RunCrawler) { //check whether the index directory is clean or not. if not delete all files in it if (Directory.Exists(GlobalData.IndexRootPath + drive[0])) { Directory.Delete(GlobalData.IndexRootPath + drive[0], true); } Directory.CreateDirectory(GlobalData.IndexRootPath + drive[0]); //Initialize the indexer GlobalData.Indexer = new EDSIndexer(GlobalData.IndexRootPath + drive[0]); //Start File System Crawler Crawler(drive); //Optimize the indexes GlobalData.Indexer.Optimize(); GlobalData.Indexer.Close(); } } #if Log Console.WriteLine("Completed File System Crawling"); #endif if (GlobalData.RunCrawler) //only when the crawler finished its work do the following stuff.....otherwise if crawler has been terminated by closing the application donot do the following stuff { GlobalData.IndexingCompleted = true; long end = DateTime.Now.Ticks; DateTime dt = new DateTime(end - start); GlobalData.lIndexingStatus.Text = "Indexing: Completed 100% in " + (dt.Hour != 0 ? dt.Hour + "h:" : "") + (dt.Minute != 0 ? dt.Minute + "m:" : "") + (dt.Second != 0 ? dt.Second + "s: " : "") + (dt.Millisecond != 0 ? dt.Millisecond + "ms" : ""); //update the statusbar indexed documents count int docCount = 0; foreach (string dir in Directory.GetDirectories(GlobalData.IndexRootPath)) { IndexReader ir = IndexReader.Open(dir); docCount += ir.NumDocs(); ir.Close(); } if (GlobalData.MainStatusStrip != null && GlobalData.MainStatusStrip.Items.Count != 0) { GlobalData.MainStatusStrip.Items["tsslDocCount"].Text = docCount + " documents indexed "; } //Finally start file system monitor for further file system updates if (GlobalData.RunMonitor) { #if Log Console.WriteLine("Starting File System Monitor"); #endif FileSystemMonitor fsw = FileSystemMonitor.GetInstance(); foreach (string drive in Environment.GetLogicalDrives()) { fsw.AddMonitor(drive); } fsw.StartAllMonitors(); } } //after completion of crawling stop the scheduler by setting RunScheduler => false; GlobalData.RunScheduler = false; }