
一、实现思路:
1. 创建一个队列(使用C# 队列类 Queue,需要使用命名空间 System.Collections.Generic);
2. 把起始文件夹名称排入队中;
3. 检查队列中是否有文件夹,如果有,从队列中取出队首文件夹;
4. 把该文件夹下的子文件夹全部排入队中;
5. 把该文件夹下的全部文件做出相应处理;
6. 重复执行步骤 3-5,直到队列为空。
补充说明:使用委托建立消息机制,可以把该方法改造成通用文件夹遍历方法。
二、主要代码:
public static void Traversing(string sPathName)
{
//创建一个队列用于保存子目录
Queue<string> pathQueue = new Queue<string>();
//首先把根目录排入队中
pathQueue.Enqueue(sPathName);
//开始循环查找文件,直到队列中无任何子目录
while (pathQueue.Count > )
{
//从队列中取出一个目录,把该目录下的所有子目录排入队中
DirectoryInfo diParent = new DirectoryInfo(pathQueue.Dequeue());
foreach (DirectoryInfo diChild in diParent.GetDirectories())
pathQueue.Enqueue(diChild.FullName);
//查找该目录下的所有文件,依次处理
foreach (FileInfo fi in diParent.GetFiles())
Console.WriteLine(fi.FullName);
}
}
三、控制台测试程序完整代码
测试环境:Win7 + Visual Studio 2010
测试方法:建立一个控制台应用程序,用下述代码覆盖 Program.cs 中的所有内容
using System;
using System.Collections.Generic;
using System.IO;
namespace Traversing
{
class Program
{
static void Main(string[] args)
{
Traversing("C:\\Program Files\\Microsoft Office");
Console.ReadKey();
}
/// <summary>
/// 几乎最简练的文件夹遍历方法(8行代码,广度优先算法)
/// </summary>
/// <param name="sPathName">起始文件夹</param>
public static void Traversing(string sPathName)
{
//创建一个队列用于保存子目录
Queue<string> pathQueue = new Queue<string>();
//首先把根目录排入队中
pathQueue.Enqueue(sPathName);
//开始循环查找文件,直到队列中无任何子目录
while (pathQueue.Count > )
{
//从队列中取出一个目录,把该目录下的所有子目录排入队中
DirectoryInfo diParent = new DirectoryInfo(pathQueue.Dequeue());
foreach (DirectoryInfo diChild in diParent.GetDirectories())
pathQueue.Enqueue(diChild.FullName);
//查找该目录下的所有文件,依次处理
foreach (FileInfo fi in diParent.GetFiles())
Console.WriteLine(fi.FullName);
}
}
}
}