C#遍历指定目录的递归(完美改进版+完整程序源码)
昨天写了一下遍历目录树的思路和核心代码,今天将其实践化了一下,做了个实际的例子,遍历指定目录下的所有文件和文件夹,并将其按层次归类显示,对文件夹有标志提示,将文件夹与文件区分了出来。
下面是改进版的核心方法代码:
具体原理每行关键核心代码后都有注释,大家应该可以看明白的
下面附上这个方法的使用范例(例子中有两个方法,第一个按钮只遍历指定目录下一级层次;第二个按钮是调用上述方法,遍历了指定目录下的所有层次文件夹和文件)
源代码,点击下载
转自: http://www.cnblogs.com/cnmawei/archive/2007/06/13/781547.html
下面是改进版的核心方法代码:
1
public ArrayList al = new ArrayList();//定义存储文件和文件夹名的数组
2
public int aaa = 0;//定义标志位参数,递归时判断该参数,若不为0则非第一次递归
3
public void GetAllDirList(string strBaseDir)
4
{
5
DirectoryInfo di = new DirectoryInfo(strBaseDir);
6
DirectoryInfo[] diA = di.GetDirectories();
7
if(aaa==0)
8
{
9
FileInfo[] fis2 = di.GetFiles(); //有关目录下的文件
10
for (int i2 = 0; i2 < fis2.Length; i2++)
11
{
12
al.Add(fis2[i2].FullName);
13
//fis2[i2].FullName是根目录中文件的绝对地址,把它记录在ArrayList中
14
}
15
}
16
for (int i = 0; i < diA.Length; i++)
17
{
18
aaa++;
19
al.Add(diA[i].FullName + "\t<目录>");
20
//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中
21
DirectoryInfo di1 = new DirectoryInfo(diA[i].FullName);
22
DirectoryInfo[] diA1 = di1.GetDirectories();
23
FileInfo[] fis1 = di1.GetFiles(); //有关目录下的文件
24
for (int ii = 0; ii < fis1.Length;ii++ )
25
{
26
al.Add(fis1[ii].FullName);
27
//fis1[ii].FullName是某个子目录中文件的绝对地址,把它记录在ArrayList中
28
29
}
30
GetAllDirList(diA[i].FullName);
31
//注意:递归了。逻辑思维正常的人应该能反应过来
32
}
33
34
}
public ArrayList al = new ArrayList();//定义存储文件和文件夹名的数组2
public int aaa = 0;//定义标志位参数,递归时判断该参数,若不为0则非第一次递归3
public void GetAllDirList(string strBaseDir)4
{5
DirectoryInfo di = new DirectoryInfo(strBaseDir);6
DirectoryInfo[] diA = di.GetDirectories();7
if(aaa==0)8
{9
FileInfo[] fis2 = di.GetFiles(); //有关目录下的文件 10
for (int i2 = 0; i2 < fis2.Length; i2++)11
{12
al.Add(fis2[i2].FullName);13
//fis2[i2].FullName是根目录中文件的绝对地址,把它记录在ArrayList中14
}15
}16
for (int i = 0; i < diA.Length; i++)17
{18
aaa++;19
al.Add(diA[i].FullName + "\t<目录>");20
//diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中21
DirectoryInfo di1 = new DirectoryInfo(diA[i].FullName);22
DirectoryInfo[] diA1 = di1.GetDirectories();23
FileInfo[] fis1 = di1.GetFiles(); //有关目录下的文件 24
for (int ii = 0; ii < fis1.Length;ii++ )25
{26
al.Add(fis1[ii].FullName);27
//fis1[ii].FullName是某个子目录中文件的绝对地址,把它记录在ArrayList中28

29
} 30
GetAllDirList(diA[i].FullName);31
//注意:递归了。逻辑思维正常的人应该能反应过来32
}33
34
}具体原理每行关键核心代码后都有注释,大家应该可以看明白的
下面附上这个方法的使用范例(例子中有两个方法,第一个按钮只遍历指定目录下一级层次;第二个按钮是调用上述方法,遍历了指定目录下的所有层次文件夹和文件)
源代码,点击下载
转自: http://www.cnblogs.com/cnmawei/archive/2007/06/13/781547.html


浙公网安备 33010602011771号