private void EnumerateIncludeItems(List <DirectoryInfo> directories, List <FileInfo> files, WatchingTree watchingTree) { foreach (string path in IncludeItems.Files) { WatchingTreeItem item = watchingTree.ItemByPath(path, ItemType.File); item.Data = new ItemWatchingOptions(); if (File.Exists(path)) { files.Add(new FileInfo(path)); item.Data.WatchingStatus = ItemWatchingStatus.Watched; } else { item.Data.WatchingStatus = ItemWatchingStatus.Expected; } } foreach (string path in IncludeItems.Directories) { WatchingTreeItem item = watchingTree.ItemByPath(path, ItemType.Directory); item.Data = new ItemWatchingOptions(); if (Directory.Exists(path)) { directories.Add(new DirectoryInfo(path)); item.Data.WatchingStatus = ItemWatchingStatus.Watched; } else { item.Data.WatchingStatus = ItemWatchingStatus.Expected; } } }
private void EnumerateScanDirectory(DirectoryScanOptions scanOptions, List <DirectoryInfo> directories, List <FileInfo> files, WatchingTree watchingTree) { WatchingTreeItem item = watchingTree.ItemByPath(scanOptions.DirectoryPath, ItemType.Directory); item.Data = new ItemWatchingOptions() { ScanOptions = scanOptions, WatchingStatus = ItemWatchingStatus.ScanNeeded }; if (!Directory.Exists(scanOptions.DirectoryPath)) { return; } Queue <DirectoryInfo> dirque = new Queue <DirectoryInfo>(); DirectoryInfo dir = new DirectoryInfo(scanOptions.DirectoryPath); dirque.Enqueue(dir); dirque.Enqueue(null); int currentDepth = 1; int maxdepth = scanOptions.ScanDepth; DirectoryInfo current; ScanFilterOptions excludeFilters = scanOptions.Excludes; ScanFilterOptions includeFilters = scanOptions.Includes; while (true) { current = dirque.Dequeue(); if (current == null) { if (dirque.Count <= 0) { break; } currentDepth++; if (currentDepth > maxdepth) { foreach (DirectoryInfo directory in dirque) { if (!excludeFilters.IsMatch(directory) && includeFilters.IsMatch(directory)) { directories.Add(directory); } } break; } else { dirque.Enqueue(null); continue; } } IEnumerable <DirectoryInfo> enumeratedDirectories = current.EnumerateDirectories(); if (!includeFilters.IsDefault) { foreach (DirectoryInfo directory in enumeratedDirectories) { if (includeFilters.IsMatch(directory)) { directories.Add(directory); } else if (!excludeFilters.IsMatch(directory)) { dirque.Enqueue(directory); } } } else { foreach (DirectoryInfo directory in enumeratedDirectories) { if (!excludeFilters.IsMatch(directory)) { dirque.Enqueue(directory); } } } IEnumerable <FileInfo> enumeratedFiles = current.EnumerateFiles(); if (!includeFilters.IsDefault) { foreach (FileInfo file in enumeratedFiles) { if (includeFilters.IsMatch(file)) { files.Add(file); } } } else { foreach (FileInfo file in enumeratedFiles) { if (!excludeFilters.IsMatch(file) && includeFilters.IsMatch(file)) { files.Add(file); } } } } }