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); } } }; } }