zoukankan      html  css  js  c++  java
  • 将文件夹遍历到treeview控件

        /// <summary>
            /// 填充目录到TreeView中
            /// </summary>
            /// <param name="tvw"></param>
            /// <param name="isSource"></param>
            private void FillDirectoryTree(TreeView tvw, bool isSource)
            {
                tvw.Nodes.Clear();

                // 获取逻辑驱动器,并放入根节点。
                // 用本机上所有逻辑驱动器填充数组。
                string[] strDrives = Environment.GetLogicalDrives();

                // 遍历驱动器,添加到树中
                // 用try/catch块,在驱动器未准备好时,如是一个空软盘或CD时,不把它添加到树中
                foreach (string rootDirectoryName in strDrives)
                {
                    if (rootDirectoryName != @"E:\")
                        continue;
                    try
                    { 
                        // 用所有一级子目录填充数组,如驱动器未准备好,抛出异常
                        DirectoryInfo dir = new DirectoryInfo(rootDirectoryName);   // using System.IO;
                        dir.GetDirectories();

                        TreeNode ndRoot = new TreeNode(rootDirectoryName);

                        // 为每个根目录添加节点
                        tvw.Nodes.Add(ndRoot);

                        // 添加子目录节点
                        // 如isSource==true,在TreeView中显示到文件,否则只显示到目录
                        GetSubDirectoryNodes(ndRoot, ndRoot.Text, isSource);
                    }
                    catch(Exception e)
                    { 
                        // 捕捉错误,在驱动器未准备好时。
                        MessageBox.Show(e.Message);
                    }
                }
            }   // FillDirectoryTree

            /// <summary>
            /// 获取目录节点下的所有子目录,并添加到目录树中。
            /// 传入的参数为此子目录的父节点,此子目录的完整路径名,以及一个bool值,表示是否获取子目录的文件
            /// </summary>
            private void GetSubDirectoryNodes(TreeNode parentNode, string fullName, bool getFileNames)
            {
                DirectoryInfo dir = new DirectoryInfo(fullName);
                DirectoryInfo[] dirSubs = dir.GetDirectories();

                // 为每个子目录添加一个子节点
                foreach(DirectoryInfo dirSub in dirSubs)
                {
                    // 不显示隐藏文件夹
                    if ((dirSub.Attributes & FileAttributes.Hidden) != 0)
                    {
                        continue;
                    }

                    //MessageBox.Show(dirSub.FullName);
                    /// <summary>
                    /// 每个目录都有完整的路径,分割后只显示最后一个节点
                    /// </summary>
                    TreeNode subNode = new TreeNode(dirSub.Name);
                    parentNode.Nodes.Add(subNode);

                    // 递归调用
                    GetSubDirectoryNodes(subNode, dirSub.FullName, getFileNames);

                }
                if (getFileNames) // 书中源码中,这部分在foreach内部,不正确
                {
                    // 获取此节点的所有文件
                    FileInfo[] files = dir.GetFiles();

                    // 放置节点后。放置子目录中的文件。
                    foreach (FileInfo file in files)
                    {
                        TreeNode fileNode = new TreeNode(file.Name);
                        parentNode.Nodes.Add(fileNode);
                    }
                }
            }   // GetSubDirectoryNodes

    《C#程序设计》P363~365

  • 相关阅读:
    ThinkPhp3.2.3缓存漏洞复现以及修复建议
    thinkphp3.2.3 缓存导致getshell终极解决办法
    phpstudy后门漏洞复现php5.2
    phpStudy后门漏洞利用复现
    SQL语句利用日志写shell拿权限
    针对phpstudy默认设置的利用
    黑暗世界的搜索引擎
    CVE-2019-0708—微软RDP远程桌面代码执行漏洞复现
    记一次渗透某XX站
    通过USB 2.0电缆手动设置内核模式调试
  • 原文地址:https://www.cnblogs.com/anbylau2130/p/2852239.html
Copyright © 2011-2022 走看看