一、实现思路:

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# 遍历文件夹非递归实现(采用队列的广度优先算法)(转)的更多相关文章

  1. Java File类应用:递归遍历文件夹和递归删除文件

    要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在 若要删除正文文件夹,可以在递归 ...

  2. JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  3. linux文件夹操作及递归遍历文件夹

    文件夹相关函数介绍 //mkdir 函数创建文件夹 #include <sys/stat.h> #include <sys/types.h> int mkdir(const c ...

  4. Python【day 14-2】递归遍历文件夹

    #需求 遍历文件夹中所有的子文件夹及子文件--用递归实现 '''''' ''' 伪代码 1.遍历根目录--listdir for 得到第一级子文件夹(不包含子文件夹的子文件)和文件 2.判断是文件还是 ...

  5. TypeScript ES6-Promise 递归遍历文件夹中的文件

    貌似很多人都爱用这个作为写文章的初尝试,那来吧.遍历文件夹下的所有文件,如遍历文件夹下并操作HTML/CSS/JS/PNG/JPG步骤如下:1.传入一个路径,读取路径里面所有的文件:2.遍历读取的文件 ...

  6. PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹

    PHP递归获得树形菜单和遍历文件夹下的所有文件以及子文件夹 一.使用递归获取树形菜单 数据表category(id,name,parent_id) <?php class category{ / ...

  7. windowsAPI遍历文件夹(速度高于递归)

    #region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImpo ...

  8. JAVA 遍历文件夹下的所有文件

    JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

  9. Qt之遍历文件夹

    关于Qt操作文件夹.文件的知识用途较多,比如遍历下一层乃至所有子孙文件.文件夹,获取它们的一些信息(大小.类型.最后更改时间等).当然,也可以进行级联删除.     首先看简单的:   一.Qt遍历文 ...

随机推荐

  1. 【Ray Tracing in One Weekend 超详解】 光线追踪1-1

    Preface 从这一篇起,我们开始学光线追踪这门牛逼的技术.读了几天,一个字:强! 这一篇我们主要讲述技术入门和一些简单的案例. 我们先学这本: Ready 这本书需要ppmview这个软件帮忙看效 ...

  2. 循序渐进学.Net Core Web Api开发系列【8】:访问数据库(基本功能)

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇讨论如 ...

  3. normalizr实践使用(个人总结,仅供参考)

    # normalizr实践使用 原数据 (自编数据,本数据仅供参考) var aaaObj ={ "id" : "0000000000000000000000000000 ...

  4. web前端面试经历分享

    十天前,我还在纠结这个暑假到底是呆在实验室研究技术好还是找一份实习见识世面好,而现在我已经接到offer准备工作了.这几天真是累得够呛,一方面需要拼命准备期末考试,另一方面,需要往公司里面跑接受面试. ...

  5. zoj 3659 第37届ACM/ICPC 长春赛区现场赛E题 (并查集)

    题意:给出一棵树,找出一个点,求出所有点到这个点的权值和最大,权值为路径上所有边权的最小值. 用神奇的并查集,把路按照权值从大到小排序,然后用类似Kruskal的方法不断的加入边. 对于要加入的一条路 ...

  6. Codeforces 986D Perfect Encoding FFT

    题意: 给定一个数n,选出m个数使得 $\Pi_{i=1}^m a_i\ge n$,求$\sum_{i=1}^m a_i$的最小值 ,其中$m$的大小不限 $n$的长度$\le 10^6$ 简单的计算 ...

  7. Android之Android WebView常见问题及解决方案汇总

    如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变 ...

  8. Task Parallel Library01,基本用法

    我们知道,每个应用程序就是一个进程,一个进程有多个线程.Task Parallel Library为我们的异步编程.多线程编程提供了强有力的支持,它允许一个主线程运行的同时,另外的一些线程或Task也 ...

  9. CLR如何加载程序集以及程序集版本策略

    在项目的配置文件Web.config中,会看到<runtime>节点,以及包含在其中的<assemblyBinding>节点,这显然与程序集有关,这些节点到底何时被用到呢? 在 ...

  10. ZServer4D开源项目

    ZServer4D开源项目 ZServer4D 是一套从商业项目剥离而出的云服务器中间件,可以承载百万级的分布式负载服务,并且支持IoT及内网穿透. 作者将它开源了 https://github.co ...