C#读取文件夹树结构

时间:2022-06-08 12:53:59
一级文件夹为主目录,1个,二级文件夹有好多个,三级文件夹有好多个,一直到8级文件夹,但是我只想读取到第5级文件夹,后面三级文件夹我不想读取出来。
代码如下,path为一级文件夹目录,怎么修改可以只读到5级文件夹就停止,而不是读完全部?(读出的结构是放在treeView里)
        
public void listTreeNode(string path)  
        {
            List<TreeNode> list = new List<TreeNode>();
            DirectoryInfo dirInfo = new DirectoryInfo(path);
            FileSystemInfo[] dir = dirInfo.GetFileSystemInfos();
            foreach (FileSystemInfo di in dir)
            {
                if (di.Attributes == (System.IO.FileAttributes.Hidden | System.IO.FileAttributes.System | System.IO.FileAttributes.Directory))
                {
                    continue;
                }
                TreeNode treeNode = new TreeNode(di.Name, ListFiles(di).ToArray());
                list.Add(treeNode);
            }
            TreeNode node = new TreeNode(path, list.ToArray());
            treeView1.Nodes.Add(node);
            node.Expand();
        }

        public List<TreeNode> ListFiles(FileSystemInfo fileinfo)
        {
            List<TreeNode> nodeList = new List<TreeNode>();
            if (!fileinfo.Exists)
                return null;
            DirectoryInfo dirinfo = fileinfo as DirectoryInfo;
            if (dirinfo == null)
                return null; 
            FileSystemInfo[] files = dirinfo.GetFileSystemInfos();
            for (int i = 0; i < files.Length; i++)
            {
                DirectoryInfo subdir = files[i] as DirectoryInfo;
                if (subdir == null)
                {
                    continue;
                }
                TreeNode tnode = new TreeNode(subdir.Name, ListFiles(files[i]).ToArray());
                nodeList.Add(tnode);
            }
            return nodeList;
        }

7 个解决方案

#1


public List<TreeNode> ListFiles(FileSystemInfo fileinfo,  level = 0)

if (level < 5)
TreeNode tnode = new TreeNode(subdir.Name, ListFiles(files[i]).ToArray());
                

#2


引用 1 楼 caozhy 的回复:
public List<TreeNode> ListFiles(FileSystemInfo fileinfo,  level = 0)

if (level < 5)
TreeNode tnode = new TreeNode(subdir.Name, ListFiles(files[i]).ToArray());
                

不懂。。。

#3


TreeNode tnode = new TreeNode(subdir.Name, ListFiles(files[i], level + 1).ToArray());

#4


定义一个变量不就行啦 C#读取文件夹树结构

#5


递归的函数加个变量,>5直接return

#6


该回复于2014-07-28 23:27:31被版主删除

#7


显示树状二级菜单自己修改成多级菜单
   // 将MenuStrip控件中的多层命今项添加到TreeView控件中
   // <param newNodeA="TreeNode">TreeNode对象</param>
   // <param newmenuA="ToolStripDropDownItem">ToolStripDropDownItem对象</param>
   // <param BL="bool">标识(是否可用)</param>
        public void GetCavernMenu(TreeNode newNodeA, ToolStripDropDownItem newmenuA, bool BL)
        {
            bool Var_Bool = true;
            if (newmenuA.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
                for (int j = 0; j < newmenuA.DropDownItems.Count; j++)    //遍历二级菜单项
                {
                    //将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
                    TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
                    Var_Bool = true;
                    if (BL == false)//判断当前命令项的上一级命令是否可用
                    {
                        newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
                        newNodeB.Tag = 0;//标识,不显示相应的窗体
                        Var_Bool = false;
                    }
                    else
                    {
                        if (newmenuA.DropDownItems[j].Enabled == false)//判断当前命令项是否为可用
                        {
                            newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
                            newNodeB.Tag = 0;//标识,不显示相应的窗体
                            Var_Bool = false;
                        }
                        else
                        {
                            newNodeA.ForeColor = Color.Black;//设置当前命令项的字体颜色为可用色
                            newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString());//标识,显示相应的窗体
                        }
                    }
                    //将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
                    ToolStripDropDownItem newmenuB = (ToolStripDropDownItem)newmenuA.DropDownItems[j];
                    if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0)//如果当前命令项有子项
                    {
                        newNodeB.Tag = 0;//标识,有子项的命令项
                        GetCavernMenu(newNodeB, newmenuB, Var_Bool);//调用递归方法
                    }
                }
        }

#1


public List<TreeNode> ListFiles(FileSystemInfo fileinfo,  level = 0)

if (level < 5)
TreeNode tnode = new TreeNode(subdir.Name, ListFiles(files[i]).ToArray());
                

#2


引用 1 楼 caozhy 的回复:
public List<TreeNode> ListFiles(FileSystemInfo fileinfo,  level = 0)

if (level < 5)
TreeNode tnode = new TreeNode(subdir.Name, ListFiles(files[i]).ToArray());
                

不懂。。。

#3


TreeNode tnode = new TreeNode(subdir.Name, ListFiles(files[i], level + 1).ToArray());

#4


定义一个变量不就行啦 C#读取文件夹树结构

#5


递归的函数加个变量,>5直接return

#6


该回复于2014-07-28 23:27:31被版主删除

#7


显示树状二级菜单自己修改成多级菜单
   // 将MenuStrip控件中的多层命今项添加到TreeView控件中
   // <param newNodeA="TreeNode">TreeNode对象</param>
   // <param newmenuA="ToolStripDropDownItem">ToolStripDropDownItem对象</param>
   // <param BL="bool">标识(是否可用)</param>
        public void GetCavernMenu(TreeNode newNodeA, ToolStripDropDownItem newmenuA, bool BL)
        {
            bool Var_Bool = true;
            if (newmenuA.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
                for (int j = 0; j < newmenuA.DropDownItems.Count; j++)    //遍历二级菜单项
                {
                    //将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
                    TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
                    Var_Bool = true;
                    if (BL == false)//判断当前命令项的上一级命令是否可用
                    {
                        newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
                        newNodeB.Tag = 0;//标识,不显示相应的窗体
                        Var_Bool = false;
                    }
                    else
                    {
                        if (newmenuA.DropDownItems[j].Enabled == false)//判断当前命令项是否为可用
                        {
                            newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
                            newNodeB.Tag = 0;//标识,不显示相应的窗体
                            Var_Bool = false;
                        }
                        else
                        {
                            newNodeA.ForeColor = Color.Black;//设置当前命令项的字体颜色为可用色
                            newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString());//标识,显示相应的窗体
                        }
                    }
                    //将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
                    ToolStripDropDownItem newmenuB = (ToolStripDropDownItem)newmenuA.DropDownItems[j];
                    if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0)//如果当前命令项有子项
                    {
                        newNodeB.Tag = 0;//标识,有子项的命令项
                        GetCavernMenu(newNodeB, newmenuB, Var_Bool);//调用递归方法
                    }
                }
        }