接上篇
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