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种列出指定目录下及其所有子目录及子目录里更深层目录里的文件(需要递归),如何写成一个方法呢,希望大家来帮忙。