获取文件夹下的子文件夹及文件的名称

实现效果:

  

知识运用:

  DirectoryInfo类的GetFileSystemInfo方法  //检索当前目录的文件和子目录的强类型FileSystemInfo对象的数组

  public FileSystemInfo[] GetFileSystmeInfo()

  FileInfo类的DirectoryName属性    //获取表是目录的完整路径的字符串

  public string DircetoryName {get;}

  FileInfo类的Name属性      //获取文件名

  public override string Name{get;}

实现代码:

        private void button1_Click(object sender, EventArgs e)
        {
            if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = folderBrowserDialog1.SelectedPath;          //显示选择文件夹的路径
                tempstr = folderBrowserDialog1.SelectedPath;                //存储选择文件夹的路径
            }
            thdAddFile = new Thread(new ThreadStart(SetAddFile));           //创建一个线程
            thdAddFile.Start();                                             //启动线程
        }

        public delegate void AddFile();                                     //定义委托线程
        public void SetAddFile()
        {
            this.Invoke(new AddFile(RunAddFile));                           //对指定的线程进行托管
        }

        public void RunAddFile() 
        {
            TreeNode TNode = new TreeNode();
            File_Copy(treeView1,tempstr,TNode,0);                           //执行遍历方法
            Thread.Sleep(0);                                                //挂起主线程
            thdAddFile.Abort();                                             //退出线程
        }
        /// <summary>
        /// 一个递归方法用来遍历制定文件夹下的
        ///     所有子文件夹河文件
        /// </summary>
        /// <param name="TV">TreeView控件</param>
        /// <param name="Sdir">指定文件夹的路径</param>
        /// <param name="TNode">TreeView控件的当前节点</param>
        /// <param name="n">指定是文件还是文件夹</param>
        private void File_Copy(TreeView TV,string Sdir,TreeNode TNode,int n)
        {
            DirectoryInfo dir = new DirectoryInfo(Sdir);
            try
            {       
                if (!dir.Exists)                                       //判断所指文件或文件夹是否存在
                    return;
                DirectoryInfo dirD = dir as DirectoryInfo;
                if (dirD == null)
                    return;
                else
                {
                    if (n == 0)     
                    {
                        TNode = TV.Nodes.Add(dirD.Name);                //添加文件夹的名称
                        TNode.Tag = 1;
                    }
                    else            
                    {
                        TNode = TNode.Nodes.Add(dirD.Name);             //文件夹中添加子文件夹的名称
                        TNode.Tag = 1;
                    }
                }
                FileSystemInfo[] files = dirD.GetFileSystemInfos();     //获取文件夹中所有文件和文件夹
                foreach (FileSystemInfo FSys in files)          //对单个FileSystemInfo进行判断 是文件夹则递归
                {
                    FileInfo file = FSys as FileInfo;
                    if (file != null)                                   //是文件 进行操作
                    {
                        FileInfo SFinfo = new FileInfo(file.DirectoryName + "\\" + file.Name);  //文件的原始路径
                        TNode.Nodes.Add(SFinfo.Name);                   //添加文件
                        TNode.Tag = 1;
                    }
                    else 
                    {
                        File_Copy(TV,Sdir+"\\"+FSys.ToString(),TNode,1); //对文件夹进行递归
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return;
            }
        }

  

猜你喜欢

转载自www.cnblogs.com/feiyucha/p/10222176.html
今日推荐