Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Populate TreeView with file system directory structure

i am new with Nodes here.. :) i came up with this algorithm but it only shows the list of parent nodes.. like this..

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

i want the next node will be put in one of the node inside the previous node.. so it will come up like this..

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

i have some ideas in mind but i can implement it to codes.. :) any help please..

private void ListDirectory(TreeView treeView, String path) {                 Stack<string> stack = new Stack<string>();     TreeNode DirFilesCollection = new TreeNode();      stack.Push(path);                  while (stack.Count > 0)     {         string dir = stack.Pop();         try         {             List<String> parentDir = new List<string>();             parentDir.AddRange(Directory.GetFiles(dir, "*.*"));             parentDir.AddRange(Directory.GetDirectories(dir));              DirectoryInfo d = new DirectoryInfo(dir);             TreeNode TParent = new TreeNode(d.Name);              foreach (String s in parentDir)             {                 FileInfo f = new FileInfo(s);                 TreeNode subItems = new TreeNode(f.Name);                  TParent.Nodes.Add(subItems);             }              DirFilesCollection.Nodes.Add(TParent);              foreach (string 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); } 
like image 749
Vincent Dagpin Avatar asked Jun 04 '11 21:06

Vincent Dagpin


People also ask

How do I create a folder in TreeView?

Combine(treeView1. SelectedNode. Tag as string, "New Folder")); This will create a directory which is represented by the combination of the path of the current node and the string 'New Folder'.

What is a file tree structure?

A tree structure is the most common directory structure. The tree has a root directory, and every file in the system has a unique path. Advantages: Very general, since full pathname can be given. Very scalable, the probability of name collision is less.


1 Answers

Option #1: Recursive approach:

private void ListDirectory(TreeView treeView, string 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 #2: Non-recursive approach:

private static void ListDirectory(TreeView treeView, string path) {     treeView.Nodes.Clear();      var stack = new Stack<TreeNode>();     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); } 
like image 74
Alex Aza Avatar answered Sep 22 '22 19:09

Alex Aza