#region
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
#endregionnamespace RecursingDirectories
{
    class Tester
    {   //静态对象成员纪录总数和层次数目
        static int dirCounter = 1;
        static int indentLevel = -1;
        public static void Main(String[] args)
        {
            Tester t = new Tester();
            string theDirectory = Environment.GetEnvironmentVariable("SystemRoot");//选择开始子目录
            DirectoryInfo dir = new DirectoryInfo(theDirectory);
            t.exploreDirectory(dir);   //调用方法浏览目录
            Console.WriteLine("\n\n{0} directories found.\n",dirCounter); //任务结束,打印数据
        }        //使用一个DirectoryInfo对象运行以下代码,它会对找到的每一个目录递归调用自身
        private void exploreDirectory(DirectoryInfo dir)
        {
            
                indentLevel++;//推入一个目录层级                for (int i = 0; i < indentLevel; i++)      //对子目录缩进,每个层级前面增多两个空格
                    Console.Write("  ");
                Console.Write("[{0}] {1} [{2}]\n", indentLevel, dir.Name, dir.LastAccessTime); //打印目录                DirectoryInfo[] directories = dir.GetDirectories();//获取当前目录的所有子目录,并对每一个子目录进行递归访问
                foreach (DirectoryInfo newDir in directories)
                {
                    dirCounter++;//计算器
                    exploreDirectory(newDir);
                }                indentLevel--;//弹出一个目录层级
                    }
    }
}问题 :
随着indentLevel不断增加,不断往下级推进,
而exploreDirectory函数遍历每个子目录 
但程序执行到里面的foreach()就开始返回了
假如有两个[3]层级,先遍历第一个,但indentLevel++一直下去
又假如到了第[7]才遍历完,那么它怎么弹回来遍历第二个[3]
indentLevel--呢?它什么时候才弹出一个目录层级
怎么才一直弹回到第二个[3]层级那里?在这个过程它们不会再遍历一次原先的目录吗?

解决方案 »

  1.   

    indentLevel++ 一直加是表示目录的级数,当它没有子级的时候就执行到indentLevel--
    foreach里面是它的子集,++和--是在外面,所以当没有子集的时候+和-是相抵的
      

  2.   

     原来一直indentLevel++在子集newDir里增加,遍历所有子目录
    在外面是相抵的,但indentLevel是静态变量,子集newDir里的indentLevel的++了很多
    当从foreach完了从newDir子集出来时, indentLevel这个数也很大了
    下面的indentLevel怎么--回去,才去遍历同一层级的其它子目录
      

  3.   

    这个方法有问题,indentLevel要作为参数传入才行。
      

  4.   

    这个方法有问题,indentLevel要作为参数传入才行。
    ---------------------------
    问题出在那?
      

  5.   

    原来indentLevel++一直在子集里做,外面的indentLevel没变