C# 遍历文件夹非递归实现(采用队列的广度优先算法)(转)
一、实现思路:
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);
}
}
}
}
C# 遍历文件夹非递归实现(采用队列的广度优先算法)(转)的更多相关文章
- Java File类应用:递归遍历文件夹和递归删除文件
要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在 若要删除正文文件夹,可以在递归 ...
- JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- linux文件夹操作及递归遍历文件夹
文件夹相关函数介绍 //mkdir 函数创建文件夹 #include <sys/stat.h> #include <sys/types.h> int mkdir(const c ...
- Python【day 14-2】递归遍历文件夹
#需求 遍历文件夹中所有的子文件夹及子文件--用递归实现 '''''' ''' 伪代码 1.遍历根目录--listdir for 得到第一级子文件夹(不包含子文件夹的子文件)和文件 2.判断是文件还是 ...
- TypeScript ES6-Promise 递归遍历文件夹中的文件
貌似很多人都爱用这个作为写文章的初尝试,那来吧.遍历文件夹下的所有文件,如遍历文件夹下并操作HTML/CSS/JS/PNG/JPG步骤如下:1.传入一个路径,读取路径里面所有的文件:2.遍历读取的文件 ...
- PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹
PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹 一.使用递归获取树形菜单 数据表category(id,name,parent_id) <?php class category{ / ...
- windowsAPI遍历文件夹(速度高于递归)
#region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImpo ...
- JAVA 遍历文件夹下的所有文件
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- Qt之遍历文件夹
关于Qt操作文件夹.文件的知识用途较多,比如遍历下一层乃至所有子孙文件.文件夹,获取它们的一些信息(大小.类型.最后更改时间等).当然,也可以进行级联删除. 首先看简单的: 一.Qt遍历文 ...
随机推荐
- Codeforces.959E.Mahmoud and Ehab and the xor-MST(思路)
题目链接 \(Description\) 有一张\(n\)个点的完全图,从\(0\)到\(n-1\)标号,每两点\(i,j\)间的边权为\(i\oplus j\).求其最小生成树边权之和. \(Sol ...
- 深入理解指针—>指针函数与函数指针的区别
一. 在学习过程中发现这"指针函数"与"函数指针"容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数, ...
- 【斜优DP】bzoj4518-Sdoi2016征途
一.斜率优化DP与决策单调性 这里浅显(并且不严谨)地说明一下标题中的两个名词: 斜率优化DP:状态转移方程形如f[i]=min/max{f[k]+(x[i]-x[k])^y}的一类DP问题: 决策单 ...
- Git和Gitlab
参考 http://www.cnblogs.com/clsn/p/7929958.html#auto_id_16https://backlog.com/git-tutorial/cn/intro/in ...
- letter-spacing造成文字无法居中的问题
在使用letter-spacing增加字体间距时,发现字体间距被扩大的同时,字体无法完全居中在div中,如下: 原因:letter-spacing是在字中间产生的间隔,第一个字旁边没有间隔,所以导致不 ...
- 使用pytorch构建神经网络的流程以及一些问题
使用PyTorch构建神经网络十分的简单,下面是我总结的PyTorch构建神经网络的一般过程以及我在学习当中遇到的一些问题,期望对你有所帮助. PyTorch构建神经网络的一般过程 下面的程序是PyT ...
- 设置java.library.path的值(Mac/Linux/Windows)
说明:网上基本针对这个值的设置分为两面,Windows派和Linux派,Windows的不说,Linux下只会说设置LD_LIBRARY_PATH即可,但这种方式在Java 8是一个错误的设置,尤其是 ...
- [苹果]苹果AppStore应用审核标准
[苹果]苹果AppStore应用审核标准 http://wenku.baidu.com/view/a9152d2c647d27284b7351a1.html 苹果app审核指南 http://we ...
- 性能优化:使用SparseArray代替HashMap<Integer,Object>(转)
HashMap是java里比较常用的一个集合类,我比较习惯用来缓存一些处理后的结果.最近在做一个Android项目,在代码中定义这样一个变量,实例化时,Eclipse却给出了一个 performanc ...
- utf-8与utf-8(无BOM)的区别
BOM——Byte Order Mark,就是字节序标记 在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE ...