C#.NET中遍历指定目录下的文件(及所有子目录及子目录里更深层目录里的文件)
//遍历一个目录下所有的文件列表,代码实例
DirectoryInfo dir = new DirectoryInfo(folderName);
var list = GetAll(dir);
/// <summary>
/// 搜索文件夹中的文件
/// </summary>
/// <param name="dir"></param>
/// <returns></returns>
private static List<string> GetAll(DirectoryInfo dir)
{
List<string> fileList = new List<string>();
FileInfo[] allFile = dir.GetFiles();
foreach (FileInfo fi in allFile)
{
fileList.Add(fi.FullName);
}
DirectoryInfo[] allDir= dir.GetDirectories();
foreach (DirectoryInfo d in allDir)
{
fileList.AddRange(GetAll(d));
}
return fileList;
}
File------实用类,提供许多静态方法,用于移动、删除、和复制文件。
Directory------实用类,提供许多静态方法,用于移动、删除和复制目录。
FileInfo------表示磁盘上的物理文件,具有可以处理此文件的方法,要完成对文件的读写工作,就必须创建Stream对像。
DirectoryInfo------表示磁盘上的物理目录,具有可以处理此目录的方法
这里提供了三种方法:
1、获得指定目录下的所有文件
2、获得指定目录及其子目录的所有文件
3、列出指定目录下及所其有子目录及子目录里更深层目录里的文件(需要递归)
代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.IO; namespace WebAppFile { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string filePath=@"c:/log/"; Response.Write("测试1,获得指定目录下的所有文件:<br>"); List<FileInfo> list1 = GetFilesByDir(filePath); foreach (FileInfo fi in list1) { Response.Write("完整路径:" + fi.FullName.ToString() + " 文件名:" + fi.Name + "<br>"); } Response.Write("<br><br>测试2,获得指定目录及其子目录的所有文件:<br>"); List<FileInfo> list2 = GetAllFilesByDir(filePath); foreach (FileInfo fi in list2) { Response.Write("完整路径:"+fi.FullName.ToString() +" 文件名:"+fi.Name+ "<br>"); } Response.Write("<br><br>测试3,列出指定目录下及所有子目录及子目录里更深层目录里的文件:<br>"); GetAllFiles(filePath); } /// <summary> /// 获得指定目录下的所有文件 /// </summary> /// <param name="path"></param> /// <returns></returns> public List<FileInfo> GetFilesByDir(string path) { DirectoryInfo di = new DirectoryInfo(path); //找到该目录下的文件 FileInfo[] fi = di.GetFiles(); //把FileInfo[]数组转换为List List<FileInfo> list = fi.ToList<FileInfo>(); return list; } /// <summary> /// 获得指定目录及其子目录的所有文件 /// </summary> /// <param name="path"></param> /// <returns></returns> public List<FileInfo> GetAllFilesByDir(string path) { DirectoryInfo dir = new DirectoryInfo(path); //找到该目录下的文件 FileInfo[] fi = dir.GetFiles(); //把FileInfo[]数组转换为List List<FileInfo> list = fi.ToList<FileInfo>(); //找到该目录下的所有目录里的文件 DirectoryInfo[] subDir = dir.GetDirectories(); foreach (DirectoryInfo d in subDir) { List<FileInfo> subList = GetFilesByDir(d.FullName); foreach (FileInfo subFile in subList) { list.Add(subFile); } } return list; } /// <summary> /// 列出指定目录下及所其有子目录及子目录里更深层目录里的文件(需要递归) /// </summary> /// <param name="path"></param> public void GetAllFiles(string path) { DirectoryInfo dir = new DirectoryInfo(path); //找到该目录下的文件 FileInfo[] fi = dir.GetFiles(); foreach (FileInfo f in fi) { Response.Write("完整路径:" + f.FullName.ToString() + " 文件名:" + f.Name + "<br>"); } //找到该目录下的所有目录再递归 DirectoryInfo[] subDir = dir.GetDirectories(); foreach (DirectoryInfo d in subDir) { GetAllFiles(d.FullName); } } } }
运行结果: 测试1,获得指定目录下的所有文件: 完整路径:c:/log/2010-12-17.xml 文件名:2010-12-17.xml 完整路径:c:/log/2010-12-20.xml 文件名:2010-12-20.xml 测试2,获得指定目录及其子目录的所有文件: 完整路径:c:/log/2010-12-17.xml 文件名:2010-12-17.xml 完整路径:c:/log/2010-12-20.xml 文件名:2010-12-20.xml 完整路径:c:/log/LogBak/2010-11-20.xml 文件名:2010-11-20.xml 测试3,列出指定目录下及所有子目录及子目录里更深层目录里的文件: 完整路径:c:/log/2010-12-17.xml 文件名:2010-12-17.xml 完整路径:c:/log/2010-12-20.xml 文件名:2010-12-20.xml 完整路径:c:/log/LogBak/2010-11-20.xml 文件名:2010-11-20.xml 完整路径:c:/log/LogBak/TempLog/2010-11-20.xml 文件名:2010-11-20.xml
关于第3种列出指定目录下及其所有子目录及子目录里更深层目录里的文件(需要递归),如何写成一个方法呢,希望大家来帮忙。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2014-01-16 表达式树基础