#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]层级那里?在这个过程它们不会再遍历一次原先的目录吗?
解决方案 »
- 如何将24b的真彩图转换成8b的彩色图片
- 在c# winform中如何从textbox读入每一行数据到数组?
- 我想用C#做个程序.让火狐总在其他程序的前面
- visual studio 2008 C#中在窗体中显示移动的Lable的代码怎么写?
- 请问在webservice中,如何调用一个外部程序,并等待此外部程序关闭后才执行下一行代码(如用API和c#如何实现)?谢谢!
- 在水晶报表中如何做group by查询???
- 帮作者做个广告....NET的程序的加密软件
- [WinForm]这是第三次发了!在带有背景图片的Form上放置大量透明背景的Lable控件时,刷新会很慢!
- 如何正确的编写应用于局域网的应用程序?
- 数组地址弱问题
- 字体条形码遇到的问题!!!
- 急,请问怎么样能够让WinForm中ComboBox的右面下拉按钮上不显示三角,而显示"..."呢
foreach里面是它的子集,++和--是在外面,所以当没有子集的时候+和-是相抵的
在外面是相抵的,但indentLevel是静态变量,子集newDir里的indentLevel的++了很多
当从foreach完了从newDir子集出来时, indentLevel这个数也很大了
下面的indentLevel怎么--回去,才去遍历同一层级的其它子目录
---------------------------
问题出在那?