zoukankan      html  css  js  c++  java
  • 文件夹操作

    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是容器,拷贝我的代码,注意要换一个你自己的容器
    }
     
    View Code

    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{
       
        }
       }
     
    View Code

    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("*.---")) //查找文件
    “*.---”指要访问的文件的类型的扩展名
     
    View Code
  • 相关阅读:
    HDU 1495 非常可乐
    ja
    Codeforces Good Bye 2016 E. New Year and Old Subsequence
    The 2019 Asia Nanchang First Round Online Programming Contest
    Educational Codeforces Round 72 (Rated for Div. 2)
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)
    AtCoder Regular Contest 102
    AtCoder Regular Contest 103
    POJ1741 Tree(点分治)
    洛谷P2634 [国家集训队]聪聪可可(点分治)
  • 原文地址:https://www.cnblogs.com/blogpro/p/11458396.html
Copyright © 2011-2022 走看看