C#树图显示目录下所有文件以及文件大小(使用Stack元组来替换递归)

接上篇

C#树图显示目录下所有文件以及文件大小_c# 查看文件夹里面有多少文件-优快云博客

上一篇我们使用递归的方法来实现绑定目录和文件到树图中,关键程序代码如下:

这里我们使用Stack的方式非递归方法来实现绑定目录和文件到树图:

        /// <summary>
        /// 递归方法,绑定目录和文件到树图上
        /// 我们注意到递归段 BindTreeView(treeNode.Nodes, directories[i]); 
        /// 两个递归参数(TreeNodeCollection nodes, string directoryPath) 都需要传入新的递归参数
        /// 因此,将递归更新为Stack时,两个参数需要同时传递,我们可以使用元组Tuple来同时传递
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="directoryPath"></param>
        private void BindTreeView(TreeNodeCollection nodes, string directoryPath) 
        {
            //读取当前目录下的下一级目录,将其添加到队列中
            string[] directories = Directory.GetDirectories(directoryPath);
            for (int i = 0; i < directories.Length; i++)
            {
                TreeNode treeNode = new TreeNode(Path.GetFileName(directories[i]))
                {
                    ImageIndex = 1,
                    SelectedImageIndex = 1,
                    Tag = directories[i] //记录文件或者文件夹的路径
                };
                nodes.Add(treeNode);
                BindTreeView(treeNode.Nodes, directories[i]);
            }
            //读取当前目录下的所有文件,直接显示到树图中
            string[] files = Directory.GetFiles(directoryPath);
            for (int i = 0; i < files.Length; i++)
            {
                nodes.Add(new TreeNode(Path.GetFileName(files[i]))
                {
                    ImageIndex = 0,
                    SelectedImageIndex = 0,
                    Tag = files[i] //记录文件或者文件夹的路径
                });
            }
        }

思路:

我们注意到递归段 BindTreeView(treeNode.Nodes, directories[i]); 
两个递归参数(TreeNodeCollection nodes, string directoryPath) 都需要传入新的递归参数
因此,将递归更新为Stack时,两个参数需要同时传递(即成对传递),我们可以使用元组Tuple来同时传递.

非递归[堆栈Stack]代码如下:

       /// <summary>
        /// 非递归写法,使用元组。我们注意到递归段 BindTreeView(treeNode.Nodes, directories[i]); 
        /// 两个递归参数(TreeNodeCollection nodes, string directoryPath) 都需要传入新的递归参数
        /// 因此,将递归更新为Stack时,两个参数需要同时传递,我们可以使用元组Tuple来同时传递
        /// </summary>
        /// <param name="nodes"></param>
        /// <param name="directoryPath"></param>
        private void BindTreeViewIteration(TreeNodeCollection nodes, string directoryPath)
        {
            Sta
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯内科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值