C# 递归遍历目录与非递归遍历目录
来源:互联网 发布:编辑矢量图的软件 编辑:程序博客网 时间:2024/04/30 02:34
C#实现递归遍历目录与非递归遍历目录,代码如下:
/// <summary>
/// 递归遍历
/// </summary>
/// <param name="pathname"></param>
/// <param name="list"></param>
public void GetFilesRecursion(string pathname, ref List<string> 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/>");
}
- C# 递归遍历目录与非递归遍历目录
- 递归与非递归 遍历文件目录
- 递归与非递归遍历文件目录
- 非递归算法遍历目录
- Java递归和非递归遍历目录
- 使用非递归实现遍历目录
- 目录的递归遍历
- 目录的递归遍历
- 递归遍历目录
- linux 目录递归遍历
- 递归遍历目录文件
- perl递归遍历目录
- for递归遍历目录
- 递归遍历目录
- 遍历目录(递归)
- 递归遍历目录文件
- php递归遍历目录
- QT递归遍历目录
- bzoj 1071 [SCOI2007]组队 单调性
- redhat 6.2 环境搭载
- DBCP配置连接池解决多次访问数据库后web程序无响应
- JAVA对象转型
- 成为Java高手的25个学习目标--经典
- C# 递归遍历目录与非递归遍历目录
- [学习记录]iOS的一些数学函数
- Linux下获取当前时间到1970年之前某年份的秒数的C代码实现
- 图文解说:Nginx+tomcat配置集群负载均衡
- Groovy语言下的Grails框架
- SQLSERVER校验身份证号 合法性
- Android Matrix
- TFTP与FTP的区别及Linux下TFTP的安装
- Search Insert Position