C#遍历目录树的递归
众所周知,获得某一目录下第一级的所有文件和文件夹列表,很容易办到: DirectoryInfo di=new DirectoryInfo(strBaseDir);//strBaseDir是起始目录,绝对地址 DirectoryInfo[] diA=di.GetDirectories();//获得了所有一级子目录 FileInfo[] fiA=di.GetFiles();//获得了所有起始目录下的文件 要是想获得某一目录下的所有文件和目录(包含所有子目录),那该怎么办呢?目录都是一层套一层的,我们不能预知某个目录的深度,只有获得了父节点,才有可能了解子节点,解决这个问题,只有递归这个概念了。 那么什么是递归呢?请不会C语言的朋友先去看书吧,我这里只简单的说一下我的理解:递归就是一个方法,在这个方法里面,再次调用它本身这个方法,从而描述了某一事物运作的深度…… - - 不废话了,看代码吧: public ArrayList al=new ArrayList(); //我把ArrayList当成动态数组用,非常好用 public void GetAllDirList(string strBaseDir) { DirectoryInfo di=new DirectoryInfo(strBaseDir); DirectoryInfo[] diA=di.GetDirectories(); for(int i=0;i<diA.Length;i++) { al.Add(diA[i].FullName); //diA[i].FullName是某个子目录的绝对地址,把它记录在ArrayList中 GetAllDirList(diA[i].FullName); //注意:递归了。逻辑思维正常的人应该能反应过来 } } 最后,如何把所有目录信息从ArrayList中取出来呢?如下: for(int i=0;i<al.Count;i++) { textBox1.AppendText(al[i].ToString()+" "); //textBox1是容器,拷贝我的代码,注意要换一个你自己的容器 }
C#遍历文件夹
//得到该文件夹下的符合条件的文件个数和大小 private void button1_Click(object sender, System.EventArgs e) { try { //得到路径 string pathtext=filepath.Text.Trim(); //得到时间 string filetime=dateTimePicker1.Value.ToShortDateString(); string filetimestr=filetime+" "+"00:00:00"; DateTime getFileTime=DateTime.Parse(filetimestr); //得到的路径不能为空 if(pathtext==null||pathtext.Equals("")) { MessageBox.Show("路径不能为空","错误"); } else { //得到文件名,目录 string[] filename=Directory.GetFiles(pathtext); //初始化文件计数器 int a=0; //初始化文件大小 long j=0; //打开等待窗口 Sousuo ss=new Sousuo(); ss.Show(); //遍历文件夹 foreach(string file in filename) { //得到文件的创建时间 DateTime CreationTime=File.GetCreationTime(file); //得到符合条件的文件,某个时间段之前的文件 if(getFileTime>CreationTime) { //得到文件的大小 FileInfo f=new FileInfo(file); long len=f.Length; j=j+len; a++; } } //关闭窗口 ss.Close(); num.Text=a.ToString();//输出个数 i=a; long x=j/1024/1024; filelen.Text=x.ToString();//得到大小 button2.Enabled=true; MessageBox.Show("搜索完毕!","系统提示"); } } catch{ MessageBox.Show("请检查路径是否正确","系统提示"); } //遍历文件夹,把符合条件的文件删除 //删除按钮 private void button2_Click(object sender, System.EventArgs e) { if(MessageBox.Show("确实要删除该文件么?","系统提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question)==DialogResult.Yes) { //得到路径 string pathtext=filepath.Text.Trim(); //得到时间 string filetime=dateTimePicker1.Value.ToShortDateString(); string filetimestr=filetime+" "+"00:00:00"; DateTime getFileTime=DateTime.Parse(filetimestr); //得到的路径不能为空 if(pathtext==null||pathtext.Equals("")) { MessageBox.Show("路径不能为空","错误"); } else { //得到文件名,目录 string[] filename=Directory.GetFiles(pathtext); //进度条显示,得到文件数量 progressBar1.Maximum=i; progressBar1.Minimum=0; //遍历文件夹 foreach(string file in filename) { //得到文件的创建时间 DateTime CreationTime=File.GetCreationTime(file); //得到符合条件的文件 if(getFileTime>CreationTime) { //删除 File.Delete(file); progressBar1.Step=10; progressBar1.PerformStep(); } } MessageBox.Show("文件删除完毕!","系统提示"); } } else{ } }
c#遍历一个文件夹下的所有文件包括子文件夹(转载)
using System; using System.IO; class ListAllFilesDemo { public static void Main() { Console.Write( "请输入要查询的目录: "); string dir = Console.ReadLine(); try { ListFiles(new DirectoryInfo(dir)); } catch(IOException e) { Console.WriteLine(e.Message); } } public static void ListFiles(FileSystemInfo info) { if(!info.Exists) return; DirectoryInfo dir = info as DirectoryInfo; //不是目录 if(dir == null) return; FileSystemInfo [] files = dir.GetFileSystemInfos(); for(int i = 0; i < files.Length; i++) { FileInfo file = files[i] as FileInfo; //是文件 if(file != null) Console.WriteLine(file.FullName + " " + file.Length); //对于子目录,进行递归调用 else ListFiles(files[i]); } } } C#中遍历目录下的目录的文件(二) 1、遍历一个目录下的全部目录,要用到System.IO.DirectoryInfo 类的GetDirectories方法: DirectoryInfo dir = new DirectoryInfo(@"c:"); foreach(DirectoryInfo dChild in dir.GetDirectories("*")) {//如果用GetDirectories("ab*"),那么全部以ab开头的目录会被显示 Response.Write(dChild.Name + "<BR>");//打印目录名 Response.Write(dChild.FullName + "<BR>");//打印路径和目录名 } 2、遍历一个目录下的全部文件,要用到System.IO.DirectoryInfo 类的GetFiles方法: DirectoryInfo dir = new DirectoryInfo(@"c:"); foreach(DirectoryInfo dChild in dir.GetFiles("*")) {//如果用GetFiles("*.txt"),那么全部txt文件会被显示 Response.Write(dChild.Name + "<BR>");//打印文件名 Response.Write(dChild.FullName + "<BR>");//打印路径和文件名 } 如何获取指定目录包含的文件和子目录 1. DirectoryInfo.GetFiles():获取目录中(不包含子目录)的文件,返回类型为FileInfo[],支持通配符查找; 2. DirectoryInfo.GetDirectories():获取目录(不包含子目录)的子目录,返回类型为DirectoryInfo[],支持通配符查找; 3. DirectoryInfo. GetFileSystemInfos():获取指定目录下(不包含子目录)的文件和子目录,返回类型为FileSystemInfo[],支持通配符查找; 如何获取指定文件的基本信息; FileInfo.Exists:获取指定文件是否存在; FileInfo.Name,FileInfo.Extensioin:获取文件的名称和扩展名; FileInfo.FullName:获取文件的全限定名称(完整路径); FileInfo.Directory:获取文件所在目录,返回类型为DirectoryInfo; FileInfo.DirectoryName:获取文件所在目录的路径(完整路径); FileInfo.Length:获取文件的大小(字节数); FileInfo.IsReadOnly:获取文件是否只读; FileInfo.Attributes:获取或设置指定文件的属性,返回类型为FileAttributes枚举,可以是多个值的组合 FileInfo.CreationTime、FileInfo.LastAccessTime、FileInfo.LastWriteTime:分别用于获取文件的创建时间、访问时间、修改时间; 采用递归的方式遍历,文件夹和子文件中的所有文件。 public void FindFile(string dirPath) //参数dirPath为指定的目录 { //在指定目录及子目录下查找文件,在listBox1中列出子目录及文件 DirectoryInfo Dir=new DirectoryInfo(dirPath); try { foreach(DirectoryInfo d in Dir.GetDirectories()//查找子目录 { FindFile(Dir+d.ToString()+""); listBox1.Items.Add(Dir+d.ToString()+""); //listBox1中填加目录名 } foreach(FileInfo f in Dir.GetFiles("*.---")) //查找文件 { listBox1.Items.Add(Dir+f.ToString()); //listBox1中填加文件名 } } catch(Exception e) { MessageBox.Show(e.Message); } } 用下面代码限制文件的类型: foreach(FileInfo f in Dir.GetFiles("*.---")) //查找文件 “*.---”指要访问的文件的类型的扩展名