下面是改进版的核心方法代码:
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 }
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 }
具体原理每行关键核心代码后都有注释,大家应该可以看明白的
下面附上这个方法的使用范例(例子中有两个方法,第一个按钮只遍历指定目录下一级层次;第二个按钮是调用上述方法,遍历了指定目录下的所有层次文件夹和文件)
源代码,点击下载