黑马程序员技术交流社区

标题: 如何用队列遍历文件夹? [打印本页]

作者: .net_交流    时间: 2014-7-29 10:16
标题: 如何用队列遍历文件夹?
本帖最后由 .net_交流 于 2014-7-29 15:31 编辑
  1. //排列树状目录
  2.         public static void ByQueue(string path,TreeNode tNode)
  3.         {
  4.             Queue<string> queue = new Queue<string>();

  5.             queue.Enqueue(path);
  6.             while (queue.Count > 0)
  7.             {  
  8.                 string head = queue.Dequeue();//出队从队头出
  9.                 TreeNode  nNode= tNode.Nodes.Add(Path.GetFileName(head));
  10.                 string[] dirs = Directory.GetDirectories(head);
  11.                 string[] files = Directory.GetFiles(head);
  12.                 for (int i = 0; i < dirs.Length; i++)
  13.                 {
  14.                     queue.Enqueue(dirs[i]);
  15.                     nNode.Nodes.Add(Path.GetFileName(dirs[i]));
  16.                 }
  17.             }
  18.         }
复制代码


代码错了,和预想不一样,有没有大神可以写一个正确的队列遍历,三Q了
作者: _xixi_    时间: 2014-7-29 11:24
本帖最后由 _xixi_ 于 2014-7-29 13:11 编辑
  1. public void ByQueue(string path, TreeNode tNode)
  2.         {
  3.             Queue<TreeNode> node = new Queue<TreeNode>();

  4.             TreeNode nNode=null;

  5.             do
  6.             {
  7.                 if (tNode == null)
  8.                 {
  9.                     //tvMain 是TreeView面板的名字
  10.                     nNode = tvMain.Nodes.Add(Path.GetFileName(path));
  11.                     nNode.Tag = path;
  12.                     node.Enqueue(nNode);
  13.                     tNode = nNode;
  14.                 }
  15.                 else
  16.                 {
  17.                     tNode = node.Dequeue();

  18.                     //获取当前目录的子目录
  19.                     string[] dirs = Directory.GetDirectories(tNode.Tag.ToString());

  20.                     //每个节点的子节点也添加到队列里
  21.                     for (int i = 0; i < dirs.Length; i++)
  22.                     {
  23.                         nNode = tNode.Nodes.Add(Path.GetFileName(dirs[i]));
  24.                         nNode.Tag = dirs[i];
  25.                         node.Enqueue(nNode);
  26.                     }

  27.                 }
  28.             } while (node.Count > 0);
  29.         }
复制代码
在load方法添加ByQueue(路径, null);  就可以了
作者: .net_交流    时间: 2014-7-29 15:09
_xixi_ 发表于 2014-7-29 11:24
在load方法添加ByQueue(路径, null);  就可以了

谢谢,学到了,没想到用<TreeNode>  泛型,一直用Queue<string> 想两天了也没想出来,不知道用<string> 这题能做不 ??:lol 大神能帮帮忙吗?

作者: _xixi_    时间: 2014-7-29 15:33
如果队列里面存的是string的话,那每次删除队头的时候你要保证知道这个string对应的是哪个节点,感觉很有难度,再定义一个队列来存储节点,就有些累赘了;我也不是大神,只是我刚好做过这类题而已,哈哈~交流嘛
作者: .net_交流    时间: 2014-7-29 15:55
_xixi_ 发表于 2014-7-29 15:33
如果队列里面存的是string的话,那每次删除队头的时候你要保证知道这个string对应的是哪个节点,感觉很有难 ...

是滴是滴。。。。。:lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2