public Form1(IEnumerable <FileInfo> files) { InitializeComponent(); var parentList = new Dictionary <string, FileTreeNode>(); var rootNodes = new List <FileTreeNode>(); foreach (var file in files) { var node = new FileTreeNode(file, true); var rootNode = AddParentsOfNode(parentList, file.Directory, node); if (rootNode != null) { rootNodes.Add(rootNode); } } foreach (var node in rootNodes) { MergeNodes(node); } fileTree.Nodes.AddRange(rootNodes.ToArray()); }
private FileTreeNode AddParentsOfNode(IDictionary <string, FileTreeNode> parentList, DirectoryInfo nodeDir, FileTreeNode node) { if (nodeDir == null) { return(node); } var parentDidNotExist = false; if (!parentList.TryGetValue(nodeDir.FullName, out FileTreeNode parentNode)) { parentNode = new FileTreeNode(nodeDir); parentList[nodeDir.FullName] = parentNode; parentDidNotExist = true; } parentNode.Nodes.Add(node); if (parentDidNotExist) { return(AddParentsOfNode(parentList, nodeDir.Parent, parentNode)); } return(null); }