Remplir TreeView avec la structure de répertoire du système de fichiers

Je suis nouveau avec les nœuds ici .. 🙂 Je suis venu avec cet algorithme, mais il ne montre que la liste des nœuds parents .. comme ça ..

a a.txt b c c m n b o p etc... 

Je veux que le prochain nœud soit placé dans l’un des nœuds du nœud précédent.

 a a.txt b o p c m n etc... 

J’ai quelques idées en tête, mais je peux le mettre en oeuvre avec des codes .. 🙂

 private void ListDirectory(TreeView treeView, Ssortingng path) { Stack stack = new Stack(); TreeNode DirFilesCollection = new TreeNode(); stack.Push(path); while (stack.Count > 0) { ssortingng dir = stack.Pop(); try { List parentDir = new List(); parentDir.AddRange(Directory.GetFiles(dir, "*.*")); parentDir.AddRange(Directory.GetDirectories(dir)); DirectoryInfo d = new DirectoryInfo(dir); TreeNode TParent = new TreeNode(d.Name); foreach (Ssortingng s in parentDir) { FileInfo f = new FileInfo(s); TreeNode subItems = new TreeNode(f.Name); TParent.Nodes.Add(subItems); } DirFilesCollection.Nodes.Add(TParent); foreach (ssortingng dn in Directory.GetDirectories(dir)) { stack.Push(dn); } } catch {} } Action clearTreeView = () => treeView.Nodes.Clear(); this.Invoke(clearTreeView); Action showTreeView = () => treeView.Nodes.Add(DirFilesCollection); this.Invoke(showTreeView); } 

Option 1: approche récursive:

 private void ListDirectory(TreeView treeView, ssortingng path) { treeView.Nodes.Clear(); var rootDirectoryInfo = new DirectoryInfo(path); treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo)); } private static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo) { var directoryNode = new TreeNode(directoryInfo.Name); foreach (var directory in directoryInfo.GetDirectories()) directoryNode.Nodes.Add(CreateDirectoryNode(directory)); foreach (var file in directoryInfo.GetFiles()) directoryNode.Nodes.Add(new TreeNode(file.Name)); return directoryNode; } 

Option n ° 2: approche non récursive:

 private static void ListDirectory(TreeView treeView, ssortingng path) { treeView.Nodes.Clear(); var stack = new Stack(); var rootDirectory = new DirectoryInfo(path); var node = new TreeNode(rootDirectory.Name) { Tag = rootDirectory }; stack.Push(node); while (stack.Count > 0) { var currentNode = stack.Pop(); var directoryInfo = (DirectoryInfo)currentNode.Tag; foreach (var directory in directoryInfo.GetDirectories()) { var childDirectoryNode = new TreeNode(directory.Name) { Tag = directory }; currentNode.Nodes.Add(childDirectoryNode); stack.Push(childDirectoryNode); } foreach (var file in directoryInfo.GetFiles()) currentNode.Nodes.Add(new TreeNode(file.Name)); } treeView.Nodes.Add(node); }