public void WalkTree(string shareRoot) { try { // Walks a tree checking files and generating results as it goes. Stack <string> dirs = new Stack <string>(20); if (!Directory.Exists(shareRoot)) { return; } dirs.Push(shareRoot); while (dirs.Count > 0) { string currentDir = dirs.Pop(); string[] subDirs; try { subDirs = Directory.GetDirectories(currentDir); } catch (UnauthorizedAccessException) { //Mq.Trace(e.ToString()); continue; } catch (DirectoryNotFoundException) { //Mq.Trace(e.ToString()); continue; } catch (Exception e) { Mq.Trace(e.ToString()); continue; } string[] files = null; try { files = Directory.GetFiles(currentDir); } catch (UnauthorizedAccessException) { //Mq.Trace(e.ToString()); continue; } catch (DirectoryNotFoundException) { //Mq.Trace(e.ToString()); continue; } catch (Exception e) { Mq.Trace(e.ToString()); continue; } // check if we actually like the files foreach (string file in files) { FileTaskScheduler.New(() => { try { FileScanner fileScanner = new FileScanner(file); } catch (Exception e) { Mq.Trace(e.ToString()); } }); } // Push the subdirectories onto the stack for traversal if they aren't on any discard-lists etc. foreach (string dirStr in subDirs) { foreach (ClassifierRule classifier in MyOptions.DirClassifiers) { try { DirClassifier dirClassifier = new DirClassifier(classifier); DirResult dirResult = dirClassifier.ClassifyDir(dirStr); // TODO: concurrency uplift: when there is a pooled concurrency queue, just add the dir as a job to the queue if (dirResult.ScanDir) { dirs.Push(dirStr); } } catch (Exception e) { Mq.Trace(e.ToString()); continue; } } } } } catch (Exception e) { Mq.Error(e.ToString()); } }
public void WalkTree(string currentDir) { // Walks a tree checking files and generating results as it goes. if (!Directory.Exists(currentDir)) { return; } try { string[] files = Directory.GetFiles(currentDir); // check if we actually like the files foreach (string file in files) { FileTaskScheduler.New(() => { try { FileScanner.ScanFile(file); } catch (Exception e) { Mq.Error("Exception in FileScanner task for file " + file); Mq.Trace(e.ToString()); } }); } } catch (UnauthorizedAccessException) { //Mq.Trace(e.ToString()); //continue; } catch (DirectoryNotFoundException) { //Mq.Trace(e.ToString()); //continue; } catch (IOException) { //Mq.Trace(e.ToString()); //continue; } catch (Exception e) { Mq.Degub(e.ToString()); //continue; } try { string[] subDirs = Directory.GetDirectories(currentDir); // Create a new treewalker task for each subdir. if (subDirs.Length >= 1) { foreach (string dirStr in subDirs) { bool scanDir = true; foreach (ClassifierRule classifier in MyOptions.DirClassifiers) { try { DirClassifier dirClassifier = new DirClassifier(classifier); DirResult dirResult = dirClassifier.ClassifyDir(dirStr); if (dirResult.ScanDir == false) { scanDir = false; break; } } catch (Exception e) { Mq.Trace(e.ToString()); continue; } } if (scanDir == true) { TreeTaskScheduler.New(() => { try { WalkTree(dirStr); } catch (Exception e) { Mq.Error("Exception in TreeWalker task for dir " + dirStr); Mq.Error(e.ToString()); } }); } else { Mq.Trace("Skipped scanning on " + dirStr + " due to Discard rule match."); } } } } catch (UnauthorizedAccessException) { //Mq.Trace(e.ToString()); //continue; } catch (DirectoryNotFoundException) { //Mq.Trace(e.ToString()); //continue; } catch (IOException) { //Mq.Trace(e.ToString()); //continue; } catch (Exception e) { Mq.Trace(e.ToString()); //continue; } }
public void WalkTree(string currentDir, int delayTime = 1) { // Walks a tree checking files and generating results as it goes. if (!Directory.Exists(currentDir)) { return; } try { string[] files = Directory.GetFiles(currentDir); // check if we actually like the files foreach (string file in files) { //FileTaskScheduler.New(() => //{ try { FileScanner.ScanFile(file); } catch (Exception e) { Mq.Error("Exception in FileScanner task for file " + file); Mq.Trace(e.ToString()); } //Mq.Info("Sleeping " + delayTime.ToString() + " Seconds"); System.Threading.Thread.Sleep(delayTime); //}); } } catch (UnauthorizedAccessException) { //Mq.Trace(e.ToString()); //continue; } catch (DirectoryNotFoundException) { //Mq.Trace(e.ToString()); //continue; } catch (Exception e) { Mq.Trace(e.ToString()); //continue; } try { string[] subDirs = Directory.GetDirectories(currentDir); // Create a new treewalker task for each subdir. if (subDirs.Length >= 1) { foreach (string dirStr in subDirs) { Mq.Degub($"Processing directory {dirStr}"); foreach (ClassifierRule classifier in MyOptions.DirClassifiers) { try { DirClassifier dirClassifier = new DirClassifier(classifier); DirResult dirResult = dirClassifier.ClassifyDir(dirStr); if (dirResult.ScanDir) { //TreeTaskScheduler.New(() => //{ try { WalkTree(dirStr, delayTime); } catch (Exception e) { Mq.Error("Exception in TreeWalker task for dir " + dirStr); Mq.Error(e.ToString()); } //}); } } catch (Exception e) { Mq.Trace(e.ToString()); continue; } // Mq.Info("Sleeping " + delayTime.ToString() + " Seconds"); System.Threading.Thread.Sleep(delayTime); } } } } catch (UnauthorizedAccessException) { //Mq.Trace(e.ToString()); //continue; } catch (DirectoryNotFoundException) { //Mq.Trace(e.ToString()); //continue; } catch (Exception e) { Mq.Trace(e.ToString()); //continue; } }