internal ApplicationDirectoryState(string relativePath, ApplicationDirectoryState parent) { RelativePath = relativePath; ChildDirectories = new List <ApplicationDirectoryState>(); Files = new List <ApplicationFileState>(); Parent = parent; }
public void PruneEmptyDirectories(ApplicationDirectoryState working, ApplicationDirectoryState parent) { var dirs = working.ChildDirectories.ToArray(); foreach (var applicationDirectoryState in dirs) { PruneEmptyDirectories(applicationDirectoryState, working); } if (working.ChildDirectories.Count == 0) { if (working.Files.Count == 0) { parent?.RemoveDirectory(working); } } }
private void LoadDirectories() { if (Directory.Exists(_path)) { var stack = new Stack <Tuple <string, ApplicationDirectoryState> >(); var root = new ApplicationDirectoryState("/", null); var dirs = Directory.GetDirectories(_path); var parent = root; foreach (var dir in dirs) { stack.Push(new Tuple <string, ApplicationDirectoryState>(dir, parent)); } while (stack.Count > 0) { var working = stack.Pop(); var workingState = new ApplicationDirectoryState(working.Item1.Replace(_path, ""), working.Item2); working.Item2.AddDirectory(workingState); parent = workingState; // set new parent for children dirs = Directory.GetDirectories(working.Item1); // get children foreach (var dir in dirs) { stack.Push(new Tuple <string, ApplicationDirectoryState>(dir, parent)); } var files = Directory.GetFiles(working.Item1); foreach (var file in files) { if (file.EndsWith(".bnk", true, CultureInfo.CurrentCulture)) { var applicationFileState = ApplicationFileState.Create(file, _path); workingState.AddFile(applicationFileState); _files.Add(applicationFileState); } } } PruneEmptyDirectories(root, null); RootDirectory = root; } }
internal void RemoveDirectory(ApplicationDirectoryState state) { ChildDirectories.Remove(state); }
internal void AddDirectory(ApplicationDirectoryState state) { ChildDirectories.Add(state); }
internal ApplicationState(string version, List <ApplicationFileState> files, ApplicationDirectoryState rootDirectory) { AssemblyVersion = version; _files = files; RootDirectory = rootDirectory; }