zoukankan      html  css  js  c++  java
  • C#使用线程加载指定目录下的所有子目录和文件名称到TreeView中

     

    界面设计步骤:

    从工具箱中拖放一个TreeView(teeView1)和一个Button(button1)到WinForm窗体中

    添加引用:

    using System.Threading;
    using System.IO;

    详细代码:


            #region 目录树委托定义
            private delegate void UpdateTreeViewDelegate(TreeNode node);//声明委托类型
            private static string CurrentFolderPath;
            #endregion

            #region 目录树节点操作函数
            /// <summary>
            /// 加载节点到TreeView中
            /// </summary>
            /// <param name="node">TreeNode</param>
            private void AddToTreeView(TreeNode node)
            {
                treeView1.Nodes.Add(node);
                treeView1.Refresh();
            }
            /// <summary>
            /// 递归加载指定目录下的所有子目录和文件树
            /// </summary>
            /// <param name="reg">指定目录路径</param>
            /// <param name="nodes">起始树,将在它下面建立所有子结点</param>
            internal void LoadFolderFileList(string path, TreeNode nodes)
            {
                string[] dirs = Directory.GetDirectories(path);
                string[] files = Directory.GetFiles(path);
                for (int i = 0; i < dirs.Length; i++)
                {
                    string[] info = new string[4];
                    DirectoryInfo di = new DirectoryInfo(dirs[i]);
                    TreeNode node = new TreeNode(di.Name);
                    node.Tag = di.FullName;
                    try
                    {
                        if (di.GetDirectories().Length > 0 || di.GetFiles().Length > 0)
                        {
                            LoadFolderFileList(di.FullName, node);
                        }
                        else
                        {
                            continue;
                        }
                    }
                    catch
                    {
                        continue;
                    }            
                    nodes.Nodes.Add(node);            
                }
                for (int i = 0; i < files.Length; i++)
                {
                   
                    FileInfo fi = new FileInfo(files[i]);
                    TreeNode node = new TreeNode(fi.Name);
                    node.Tag=fi.FullName;
                    nodes.Nodes.Add(node);

                }
            }

            #endregion

            #region 按钮事件
            private void button1_Click(object sender, EventArgs e)
            {
                FolderBrowserDialog myFolderBrowserDialog = new FolderBrowserDialog();
                myFolderBrowserDialog.ShowDialog();
                if (myFolderBrowserDialog.SelectedPath != "")
                {
                    CurrentFolderPath = myFolderBrowserDialog.SelectedPath;
                    Thread thread = new Thread(new ThreadStart(LoadFolderMethod));
                    thread.Start();
                }
            }
            #endregion

            #region 线程方法
            /// <summary>
            /// 获取指定目录下的所有子目录和文件
            /// </summary>
            private void LoadFolderMethod()
            {
                UpdateTreeViewDelegate loadTreeView = new UpdateTreeViewDelegate(AddToTreeView);
                string[] myPath=CurrentFolderPath.Split('\\');
                TreeNode node=new TreeNode();
                string path;
                foreach (string s in myPath)
                {
                    path=s+"\\";
                    node = new TreeNode(s);
                    node.Tag = path;
                }
                LoadFolderFileList(CurrentFolderPath, node);
                if (treeView1.InvokeRequired)//将读取的根加载至TreeView
                    treeView1.BeginInvoke(loadTreeView, node);
                else
                {
                    treeView1.Nodes.Add(node);
                }
            }
            #endregion

  • 相关阅读:
    实现SQL SERVER 下的PadLeft函数
    C#中String和string区别
    SQL经验分享(二)取得数据库中所有的表名、字段名以及字段属于哪个表
    JavaScript获取上传文件后缀名
    Url重写
    C#编程风格约定
    解决SharePoint 2003的爬网性能问题 之七
    [跨DB查询]查找SharePoint 2007中的Orphan Feature的SQL语句
    如何得到MOSS 2007的最近的100次爬网的信息
    解决SharePoint 2003的爬网性能问题 之八
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306766.html
Copyright © 2011-2022 走看看