// BFS from root to all sub directories private List <FileInfo> getFiles(ExcutionContext context) { var files = new List <FileInfo>(); var curDepth = 0; var queue = new Queue <DirectoryInfo>(); queue.Enqueue(root); while (queue.Count > 0) { if (context.getMaxDepth() == curDepth) { return(files); } var curDirectory = queue.Dequeue(); foreach (var subDirectory in curDirectory.GetDirectories()) { queue.Enqueue(subDirectory); } foreach (var file in curDirectory.GetFiles()) { files.Add(file); } curDepth++; } return(files); }
public void Execute() { var context = new ExcutionContext(); var files = new List <FileInfo>(); //Options: exscute before find files foreach (var option in options) { option.setup(context); } files = getFiles(context); //Filter: addtional filters to files foreach (var filter in filters) { files = files.Where(f => filter.evaluate(f)).ToList(); } // store filted files into context for further Actions context.files = files; //Action: execute Action at the end foreach (var action in actions) { action.invoke(context); } files.ForEach(f => Console.WriteLine($@"{f.FullName}\{f.Name} size: {f.Length/(1024)} KB")); }