private void AllFiles_ColumnClick(object sender, ColumnClickEventArgs e) { if (e.Column != 2) { return; } new Thread(() => { SFlists = !sort ? SFlists.OrderByDescending(item => new FileInfo(item[1]).LastWriteTime).ToList() : SFlists.OrderBy(item => new FileInfo(item[1]).LastWriteTime).ToList(); updatefile = true; }).Start(); AllFiles.BeginUpdate(); string Asc = ((char)0x25bc).ToString().PadLeft(4, ' '); string Des = ((char)0x25b2).ToString().PadLeft(4, ' '); if (sort == false) { sort = true; string oldStr = this.AllFiles.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' '); this.AllFiles.Columns[e.Column].Text = oldStr + Des; } else if (sort == true) { sort = false; string oldStr = this.AllFiles.Columns[e.Column].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' '); this.AllFiles.Columns[e.Column].Text = oldStr + Asc; } int rowCount = this.AllFiles.Items.Count; if (currentCol != -1) { if (e.Column != currentCol) { this.AllFiles.Columns[currentCol].Text = this.AllFiles.Columns[currentCol].Text.TrimEnd((char)0x25bc, (char)0x25b2, ' '); } } currentCol = e.Column; AllFiles.EndUpdate(); }
private void ShowSearchResult() { lock_Form = true; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); //开始数据更新 AllFiles.BeginUpdate(); AllFiles.Items.Clear(); ilstIcons.Images.Clear(); ilstIcons.Images.Add(Resources.folder); int fileCount = SDirs.Count() + SFlists.Count(); //列出所有文件夹 foreach (String[] dir in SDirs) { try { if (dir[0].Length > 30) { continue; } if (dir[1].Length > 100) { continue; } if (!Directory.Exists(dir[1])) { continue; } DirectoryInfo dirInfo = new DirectoryInfo(dir[1]); ListViewItem item = AllFiles.Items.Add(dirInfo.Name, 0); item.Tag = dirInfo.FullName; item.SubItems.Add(dirInfo.FullName); try { item.SubItems.Add(dirInfo.LastWriteTime.ToString()); } catch { item.SubItems.Add("----"); } item.SubItems.Add("文件夹"); item.SubItems.Add(""); } catch (Exception ex) { Console.WriteLine(ex.Message); } } //列出所有文件 foreach (string[] file in SFlists) { try { if (file[0].Length > 200) { continue; } if (file[1].Length > 400) { continue; } if (!File.Exists(file[1])) { continue; } FileInfo fileInfo = new FileInfo(file[1]); if (fileInfo.Extension == ".lnk") { continue; } ListViewItem item = AllFiles.Items.Add(fileInfo.Name); //为exe文件或无拓展名 if (fileInfo.Extension == ".exe" || fileInfo.Extension == "" || fileInfo.Extension == ".xml") { if (fileInfo.Extension == "") { ilstIcons.Images.Add(fileInfo.Name, Resources.fileIco); } else if (fileInfo.Extension == ".xml") { ilstIcons.Images.Add(fileInfo.Name, Resources.xml); } else { //通过当前系统获得文件相应图标 Icon fileIcon = GetSystemIcon.GetIconByFileName(fileInfo.FullName); //因为不同的exe文件一般图标都不相同,所以不能按拓展名存取图标,应按文件名存取图标 ilstIcons.Images.Add(fileInfo.Name, fileIcon); } item.ImageKey = fileInfo.Name; } //其他文件 else { if (!ilstIcons.Images.ContainsKey(fileInfo.Extension)) { Icon fileIcon = GetSystemIcon.GetIconByFileName(fileInfo.FullName); if (fileIcon == null) { fileIcon = Resources.fileIco; } //因为类型(除了exe)相同的文件,图标相同,所以可以按拓展名存取图标 ilstIcons.Images.Add(fileInfo.Extension, fileIcon); } item.ImageKey = fileInfo.Extension; } item.Tag = fileInfo.FullName; item.SubItems.Add(fileInfo.FullName); try { item.SubItems.Add(fileInfo.LastWriteTime.ToString()); } catch { item.SubItems.Add("----"); } item.SubItems.Add(fileInfo.Extension + "文件"); try { item.SubItems.Add(ShowFileSize(fileInfo.Length).Split('(')[0]); } catch { item.SubItems.Add("0KB"); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } GC.Collect(); GC.WaitForPendingFinalizers(); //结束数据更新 AllFiles.EndUpdate(); stopwatch.Stop(); long searchTime = stopwatch.ElapsedMilliseconds; statusLabel.Text = string.Format(" '{0}' keyWord has {1} files found spends {2} ms ", FilterString, AllFiles.Items.Count, searchTime); lock_Form = false; }