C#获取磁盘目录结构并显示TreeView控件中

时间:2022-08-28 12:40:02

    大家好,好久没写博客了,今天写程序遇到了要用得到磁盘目录的一个功能,于是网上查了点资料,但是没有合适的。于是基于资料的启发,重新改写了一个。现在与大家一块分享下,希望大家能够提供更好的方法。

    代码如下:

//在TreeView1中显示磁盘目录及文件
            string[] strDir = Directory.GetLogicalDrives();//获取本地计算机上格式为《驱动器名》:\的逻辑驱动器的名称

            tvMenu.Nodes.Clear();//清空TreeViee

            tvMenu.BeginUpdate();//首先禁止TreeViee的重绘

            foreach (string item in strDir)//循环将磁盘名称加入到TreeView中
            {
                TreeNode tn = new TreeNode(item);

                tvMenu.Nodes.Add(tn);
            }


            for (int i = 0; i < strDir.Length - 1; i++)//根据得到的磁盘名称循环获取磁盘目录的文件
            {
                string[] files = Directory.GetFiles(strDir[i]);//获取指定磁盘下的文件

                for (int j = 0; j < files.Length - 1; j++)
                {
                    TreeNode tn = new TreeNode(files[j].ToString());

                    tvMenu.Nodes[i].Nodes.Add(tn);
                }
            }

上面代码要想得到如期效果,还要加下这句代码。忘记贴上去了

tvMenu.EndUpdate();

 虽然这样实现了文件的添加,但是文件夹并没有成功,后来思考了一番,于是想到了如下方法。修改后的代码如下

//在TreeView1中显示磁盘目录及文件
            string[] strDir = Directory.GetLogicalDrives();//获取本地计算机上格式为《驱动器名》:\的逻辑驱动器的名称

            tvMenu.Nodes.Clear();//清空TreeViee

            tvMenu.BeginUpdate();//首先禁止TreeViee的重绘

            foreach (string item in strDir)//循环将磁盘名称加入到TreeView中
            {
                TreeNode tn = new TreeNode(item);

                tvMenu.Nodes.Add(tn);
            }

for (int k = 0; k < strDir.Length-1; k++)
            {
                DirectoryInfo dInfo = new DirectoryInfo(strDir[k]);

                FileSystemInfo[] fsInfos = dInfo.GetFileSystemInfos();

                foreach (FileSystemInfo item in fsInfos)
                {
                    if (item is Directory)
                    {
                        for (int i = 0; i < strDir.Length - 1; i++)//根据得到的磁盘名称循环获取磁盘目录的文件
                        {
                            string[] files = Directory.GetFiles(strDir[i]);//获取指定磁盘下的文件

                            for (int j = 0; j < files.Length - 1; j++)
                            {
                                TreeNode tn = new TreeNode(files[j].ToString());

                                tvMenu.Nodes[i].Nodes.Add(tn);
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0; i < strDir.Length - 1; i++)//根据得到的磁盘名称循环获取磁盘目录的文件
                        {
                            string[] files = Directory.GetFiles(strDir[i]);//获取指定磁盘下的文件

                            for (int j = 0; j < files.Length - 1; j++)
                            {
                                TreeNode tn = new TreeNode(files[j].ToString());

                                tvMenu.Nodes[i].Nodes.Add(tn);
                            }
                        }
                    }
                }
            }

            

            tvMenu.EndUpdate();

 注记:tvTreeView为TreeView的实例。希望大家能有更好的方法贴出来,共同进步。