博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 遍历文件夹非递归实现(采用队列的广度优先算法)(转)
阅读量:7191 次
发布时间:2019-06-29

本文共 1989 字,大约阅读时间需要 6 分钟。

一、实现思路:

1. 创建一个队列(使用C# 队列类 Queue,需要使用命名空间 System.Collections.Generic);

2. 把起始文件夹名称排入队中;

3. 检查队列中是否有文件夹,如果有,从队列中取出队首文件夹;

4. 把该文件夹下的子文件夹全部排入队中;

5. 把该文件夹下的全部文件做出相应处理;

6. 重复执行步骤 3-5,直到队列为空。

补充说明:使用委托建立消息机制,可以把该方法改造成通用文件夹遍历方法。

二、主要代码:

 

public static void Traversing(string sPathName){  //创建一个队列用于保存子目录    Queue
pathQueue = new Queue
(); //首先把根目录排入队中 pathQueue.Enqueue(sPathName); //开始循环查找文件,直到队列中无任何子目录 while (pathQueue.Count > 0) { //从队列中取出一个目录,把该目录下的所有子目录排入队中 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();        }        ///         /// 几乎最简练的文件夹遍历方法(8行代码,广度优先算法)        ///         /// 起始文件夹        public static void Traversing(string sPathName)        {            //创建一个队列用于保存子目录            Queue
pathQueue = new Queue
(); //首先把根目录排入队中 pathQueue.Enqueue(sPathName); //开始循环查找文件,直到队列中无任何子目录 while (pathQueue.Count > 0) { //从队列中取出一个目录,把该目录下的所有子目录排入队中 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); } } }}

 

 

转载地址:http://sgvkm.baihongyu.com/

你可能感兴趣的文章
Redhat更新yum源
查看>>
你知道测试大牛怎么写测试计划的吗?
查看>>
高层治理、底层做事
查看>>
【歪谈】创业和守业期间老板的“嘴脸”为何会不同?
查看>>
【VMware虚拟化解决方案】配置和部署VMware ESXi5.5
查看>>
配置虚拟交换机vSwitch
查看>>
Commons IO方便读写文件的工具类
查看>>
Java线程池 / Executor / Callable / Future
查看>>
java 可设置最大内存
查看>>
IP地址转、整数互相转换
查看>>
ScriptManager.RegisterStartupScript方法和Page.ClientScript.RegisterStartupScript() 区别
查看>>
我心中的核心组件(可插拔的AOP)~分布式文件上传组件~基于FastDFS
查看>>
jQ效果:jQuery,JS实现验证聚焦,失焦
查看>>
C++中的inline函数
查看>>
查看centos版本
查看>>
GitLab版本管理
查看>>
Android实例-LocationSensor位置传感器(XE8+小米2)
查看>>
新版本NDK环境结构(避Cygwin,超快)
查看>>
ceph基本操作整理
查看>>
tihs 关键字
查看>>