C#实现递归遍历目录与非递归遍历目录,代码如下:
///
/// 递归遍历
///
///
///
public void GetFilesRecursion(string pathname, ref List list)
{
string[] subFiles = Directory.GetFiles(pathname);
foreach (string subFile in subFiles)
{
//Console.WriteLine(subFile);
list.Add(subFile);
}
string[] subDirs = Directory.GetDirectories(pathname);
foreach (string subDir in subDirs)
{
GetFilesRecursion(subDir, ref list);
}
}
/// <summary>
/// 使用队列遍历
/// </summary>
/// <param name="path"></param>
/// <param name="list"></param>
public void GetFilesQueue(string path, ref List<string> list)
{
Queue<string> queue = new Queue<string>();
queue.Enqueue(path);
while (queue.Count > 0)
{
DirectoryInfo dirInfo = new DirectoryInfo(queue.Dequeue());
foreach (DirectoryInfo dirchildInfo in dirInfo.GetDirectories())
{
queue.Enqueue(dirchildInfo.FullName);
}
foreach (FileInfo filechildInfo in dirInfo.GetFiles())
{
list.Add(filechildInfo.FullName);
}
}
}
/// <summary>
/// 使用堆栈遍历
/// </summary>
/// <param name="path"></param>
/// <param name="list"></param>
public void GetFilesStack(string path, List<string> list)
{
Stack<string> stack = new Stack<string>();
stack.Push(path);
while (stack.Count > 0)
{
DirectoryInfo dirInfo = new DirectoryInfo(stack.Pop());
foreach (DirectoryInfo dirchildinfo in dirInfo.GetDirectories())
{
stack.Push(dirchildinfo.FullName);
}
foreach (FileInfo filechidlinfo in dirInfo.GetFiles())
{
list.Add(filechidlinfo.FullName);
}
}
}
/// <summary>
///
/// </summary>
/// <param name="path"></param>
/// <param name="fileRule"></param>
public void GetFiles(string path, Action<FileInfo> fileRule)
{
Queue<string> queue = new Queue<string>();
queue.Enqueue(path);
while (queue.Count > 0) {
DirectoryInfo dirInfo = new DirectoryInfo(queue.Dequeue());
foreach (DirectoryInfo dirchildInfo in dirInfo.GetDirectories())
{
queue.Enqueue(dirchildInfo.FullName);
}
foreach (FileInfo dirfileInfo in dirInfo.GetFiles())
{
fileRule(dirfileInfo);
}
}
}
调用方法如下:
string path = Server.MapPath("~");
List<string> fileList = new List<string>();
GetFilesRecursion(path, ref fileList);
for (int i = 0; i < fileList.Count; i++)
{
Response.Write(fileList[i] + "<br/>");
}
Response.Write("---------------------<br/>");
List<string> listJs = new List<string>();
GetFiles(path, (FileInfo file) => {
if (file.Extension.Equals(".js"))
{
listJs.Add(file.FullName);
}
});
for (int i = 0; i < listJs.Count; i++)
{
Response.Write(listJs[i] + "<br/>");
}
作者:doubleicon
来源:CSDN
原文:https://blog.csdn.net/u011872945/article/details/45848235
版权声明:本文为博主原创文章,转载请附上博文链接!