private HierarchyNode GetOrAddDirectory(HierarchyNode node, List<KeyValuePair<HierarchyNode, HierarchyNode>> addedItems, string dir) { var existingDir = node.FindImmediateChildByName(Path.GetFileName(dir)); if (existingDir == null) { existingDir = CreateFolderNode(dir); addedItems.Add(new KeyValuePair<HierarchyNode, HierarchyNode>(node, existingDir)); node.AddChild(existingDir); } return existingDir; }
private void AddExistingDirectory(HierarchyNode node, string path, List<KeyValuePair<HierarchyNode, HierarchyNode>> addedItems) { foreach (var dir in Directory.GetDirectories(path)) { var existingDir = GetOrAddDirectory(node, addedItems, dir); AddExistingDirectory(existingDir, dir, addedItems); } foreach (var file in Directory.GetFiles(path)) { var existingFile = node.FindImmediateChildByName(Path.GetFileName(file)); if (existingFile == null) { existingFile = CreateFileNode(file); addedItems.Add(new KeyValuePair<HierarchyNode, HierarchyNode>(node, existingFile)); node.AddChild(existingFile); } } }