engineer41
engineer41

Reputation: 81

treeview of computer directory c#

i want to access computer directory for which im uing folder browser and then the value of path selected shold be used to show treeeview .can anyone tell me what arguments to use when calling method of LISTDIRECTORY in button click.further i dont know what im doing wrong plz help

     private void button2_Click(object sender, EventArgs e)
        {
            tView.Nodes.Clear();

            if (folderBrowser.ShowDialog() == DialogResult.OK)
            {
                string[] folders = Directory.GetDirectories(folderBrowser.SelectedPath);
                foreach (string path in folders)
                {
                    ListDirectory(tView.Nodes,file.Name);
                }
            }
        }
        private static void ListDirectory(TreeView treeView,string  path)
        {


            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));
            }

            tView.Nodes.Add(node);
        }
    }
}

Upvotes: 0

Views: 3254

Answers (2)

Mohammad Arshad Alam
Mohammad Arshad Alam

Reputation: 9862

Use following code instead of your code:

    private void button2_Click(object sender, EventArgs e)
    { 
      if (folderBrowser.ShowDialog() == DialogResult.OK)
        {
            string strSearchPath=folderBrowserDialog1.SelectedPath;
            GetTree(strSearchPath);
        }
    } 

   void GetTree(string strSearchPath)
        {
            tView.Nodes.Clear();
            SetNode(tView, strSearchPath);
            tView.TopNode.Expand();
        }

        void SetNode(TreeView treeName, string path)
        {
            DirectoryInfo dirInfo = new DirectoryInfo(path);
            TreeNode node = new TreeNode(dirInfo.Name);
            node.Tag = dirInfo;
            GetFolders(dirInfo, node);
            GetFiles(dirInfo, node);
            treeName.Nodes.Add(node);
        }

        void GetFolders(DirectoryInfo d, TreeNode node)
        {    
            try
            {
                DirectoryInfo[] dInfo = d.GetDirectories();    
                if (dInfo.Length > 0)
                {
                    TreeNode treeNode = new TreeNode();
                    foreach (DirectoryInfo driSub in dInfo)
                    {
                        treeNode = node.Nodes.Add(driSub.Name, driSub.Name, 0, 0);
                        GetFiles(driSub, treeNode);
                        GetFolders(driSub, treeNode);
                    }
                }
            }
            catch (Exception ex) { }

        }

        void GetFiles(DirectoryInfo d, TreeNode node)
        {
           //if you want to search .doc or docx file then:
           // var files = d.GetFiles("*.doc*");

            var files = d.GetFiles("*.*");
            FileInfo[] subfileInfo = files.ToArray<FileInfo>();

            if (subfileInfo.Length > 0)
            {
                for (int j = 0; j < subfileInfo.Length; j++)
                {
                   //Checking for Hiddend files
                    bool isHidden = ((File.GetAttributes(subfileInfo[j].FullName) & FileAttributes.Hidden) == FileAttributes.Hidden);
                    if (!isHidden)
                    {                       
                            TreeNode treeNode = new TreeNode();
                            string path = subfileInfo[j].FullName;
                            string name = subfileInfo[j].Name;
                            treeNode = node.Nodes.Add(path, name);                 
                    }
                }
            }
        }

Hope this helps you :)

Upvotes: 2

cadsjo
cadsjo

Reputation: 106

Or you have to pass a TreeView instead of TreeView.Nodes. Or you can change to parameter type to Nodes, so you can pass nodes instead of the whole treeview.

               ListDirectory(**tView.Nodes**,file.Name);
            }
        }
    }
    private static void ListDirectory(**TreeView treeView**,string  path)
    {

HTH, John

Upvotes: 0

Related Questions