Exemplo n.º 1
0
        private void Form3_Load(object sender, EventArgs e)
        {
            /*
             * 遍历文件系统:得到一个树;堆栈数组好像用不到
             *通过遍历,判断能否往下延伸,进而知道是否为根节点
             *首先得到所有盘符,其次得到一个盘底下的所有内容
             * 刷新文件内容则交给右键刷新功能?或者隔几秒读取一次当前内容吧;不读取子级节点
             *节点展开时读取一次变化;
             *所以查询的基础建立在第一次扫描
             *实际使用发现递归会很慢
             *所以也许需要限定范围 以及异步加载
             *再有就是优化写法
             */

            #region 添加下标集合

            var url = Application.StartupPath;

            var _idx = 0;
            if ((_idx = url.LastIndexOf("\\")) != -1) //往上两级
            {
                url = url.Substring(0, _idx);
                if ((_idx = url.LastIndexOf("\\")) != -1)
                {
                    url = url.Substring(0, _idx);
                }
            }
            treeView1.ImageList = new ImageList();
            treeView1.ImageList.Images.Add(new Icon(url + "\\文件查找器资源文件\\Image\\bitbug_favicon.ico"));
            treeView1.ImageList.Images.Add(new Icon(url + "\\文件查找器资源文件\\Image\\文件夹.ico"));
            treeView1.ImageList.Images.Add(new Icon(url + "\\文件查找器资源文件\\Image\\文件.ico"));
            treeView1.ImageList.Images.Add(new Icon(url + "\\文件查找器资源文件\\Image\\磁盘.ico"));

            #endregion 添加下标集合

            List <TreeNode> tns = new List <TreeNode>();
            Dictionary <TreeNode, string> times = new Dictionary <TreeNode, string>();
            DialogResult result = MessageBox.Show("搜索全部吗?", "问询", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (result == DialogResult.Yes)
            {
                //查询全部
                var lt = GetRemovableDeviceID(); //D://

                foreach (var s in lt)
                {
                    var curNode = new TreeNode()
                    {
                        Name = s + "//", Text = s, Tag = new DirectoryInfo(s + "//")
                    };
                    curNode.Tag = new myNodeTag(curNode)
                    {
                        Tag = curNode.Tag
                    };
                    (curNode.Tag as myNodeTag).FileType = FileType.磁盘;
                    var time = INI.ReadINI("盘符上次遍历时间", s + "//");
                    treeView1.Nodes.Add(new TreeNode()
                    {
                        Name = "临时占据:" + s + "//", Text = s + "上次加载时间:" + time
                    });
                    //GetInDirectoryFiles(curNode);
                    tns.Add(curNode);
                    times.Add(curNode, time);
                }
                tns.Clear();
                foreach (var keyValuePair in times.OrderBy(k => k.Value))
                {
                    tns.Add(keyValuePair.Key);
                }
            }
            else
            {
                button3.Enabled = false;
                var src     = selPath("上次选择路径");
                var curNode = new TreeNode()
                {
                    Name = src, Text = src, Tag = new DirectoryInfo(src)
                };
                curNode.Tag = new myNodeTag(curNode)
                {
                    Tag = curNode.Tag
                };
                (curNode.Tag as myNodeTag).FileType = FileType.文件夹;
                var time = INI.ReadINI("盘符上次遍历时间", src);
                treeView1.Nodes.Add(new TreeNode()
                {
                    Name = "临时占据:" + src + "//", Text = src + "上次加载时间:" + time
                });
                tns.Add(curNode);
                times.Add(curNode, time);
            }
            开始执行搜索盘符内容的时间 = DateTime.Now;
            开始执行的时间       = DateTime.Now;
            timer1.Start();
            label2.Text = "";
            加载子节点(tns);
            foreach (int myCode in Enum.GetValues(typeof(OrderType)))
            {
                string strName  = Enum.GetName(typeof(OrderType), myCode); //获取名称
                string strVaule = myCode.ToString();                       //获取值
                var    item     = new System.Windows.Forms.ToolStripMenuItem()
                {
                    Text = strName,
                    Name = strName,
                    Tag  = strVaule
                };
                分组ToolStripMenuItem.DropDownItems.Add(item);
                item.Click += (o, args) =>
                {
                    if (contextMenuStrip1.Tag is TreeNode)
                    {
                        var node = contextMenuStrip1.Tag as TreeNode;
                        if (node != null && node.Tag is myNodeTag)
                        {
                            (node.Tag as myNodeTag).Order(
                                (OrderType)int.Parse((o as ToolStripMenuItem).Tag.ToString()), true);
                        }
                    }
                };
            }
        }