//将搜索结果显示在文件列表上 private void AddSearchResultItemIntoList(string fullPath, bool isFile) { //是文件 if (isFile) { FileInfo fileInfo = new FileInfo(fullPath); ListViewItem item = lvwFiles.Items.Add(fileInfo.Name); //为exe文件或无拓展名 if (fileInfo.Extension == ".exe" || fileInfo.Extension == "") { //通过当前系统获得文件相应图标 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); //因为类型(除了exe)相同的文件,图标相同,所以可以按拓展名存取图标 ilstIcons.Images.Add(fileInfo.Extension, fileIcon); } item.ImageKey = fileInfo.Extension; } item.Tag = fileInfo.FullName; item.SubItems.Add(fileInfo.LastWriteTimeUtc.ToString()); item.SubItems.Add(fileInfo.Extension + "文件"); item.SubItems.Add(AttributeForm.ShowFileSize(fileInfo.Length).Split('(')[0]); } //是文件夹 else { DirectoryInfo dirInfo = new DirectoryInfo(fullPath); ListViewItem item = lvwFiles.Items.Add(dirInfo.Name, IconsIndexes.Folder); item.Tag = dirInfo.FullName; item.SubItems.Add(dirInfo.LastWriteTimeUtc.ToString()); item.SubItems.Add("文件夹"); item.SubItems.Add(""); } }
//在右窗体中显示指定路径下的所有文件/文件夹 public void ShowFilesList(string path, bool isRecord) { //后退按钮可用 tsbtnBack.Enabled = true; //需要保存记录,则需要创建新的路径节点 if (isRecord) { //保存用户的历史访问路径 DoublyLinkedListNode newNode = new DoublyLinkedListNode(); newNode.Path = path; curPathNode.NextNode = newNode; newNode.PreNode = curPathNode; curPathNode = newNode; } //开始数据更新 lvwFiles.BeginUpdate(); //清空lvwFiles lvwFiles.Items.Clear(); if (path == "最近访问") { //获取最近使用的文件的路径的枚举集合 var recentFiles = RecentFilesUtil.GetRecentFiles(); foreach (string file in recentFiles) { if (File.Exists(file)) { FileInfo fileInfo = new FileInfo(file); ListViewItem item = lvwFiles.Items.Add(fileInfo.Name); //为exe文件或无拓展名 if (fileInfo.Extension == ".exe" || fileInfo.Extension == "") { //通过当前系统获得文件相应图标 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); //因为类型(除了exe)相同的文件,图标相同,所以可以按拓展名存取图标 ilstIcons.Images.Add(fileInfo.Extension, fileIcon); } item.ImageKey = fileInfo.Extension; } item.Tag = fileInfo.FullName; item.SubItems.Add(fileInfo.LastWriteTime.ToString()); item.SubItems.Add(fileInfo.Extension + "文件"); item.SubItems.Add(AttributeForm.ShowFileSize(fileInfo.Length).Split('(')[0]); } else if (Directory.Exists(file)) { DirectoryInfo dirInfo = new DirectoryInfo(file); ListViewItem item = lvwFiles.Items.Add(dirInfo.Name, IconsIndexes.Folder); item.Tag = dirInfo.FullName; item.SubItems.Add(dirInfo.LastWriteTime.ToString()); item.SubItems.Add("文件夹"); item.SubItems.Add(""); } } } else { try { DirectoryInfo directoryInfo = new DirectoryInfo(path); DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories(); FileInfo[] fileInfos = directoryInfo.GetFiles(); //删除ilstIcons(ImageList)中的exe文件的图标,释放ilstIcons的空间 foreach (ListViewItem item in lvwFiles.Items) { if (item.Text.EndsWith(".exe")) { ilstIcons.Images.RemoveByKey(item.Text); } } //列出所有文件夹 foreach (DirectoryInfo dirInfo in directoryInfos) { ListViewItem item = lvwFiles.Items.Add(dirInfo.Name, IconsIndexes.Folder); item.Tag = dirInfo.FullName; item.SubItems.Add(dirInfo.LastWriteTime.ToString()); item.SubItems.Add("文件夹"); item.SubItems.Add(""); } //列出所有文件 foreach (FileInfo fileInfo in fileInfos) { ListViewItem item = lvwFiles.Items.Add(fileInfo.Name); //为exe文件或无拓展名 if (fileInfo.Extension == ".exe" || fileInfo.Extension == "") { //通过当前系统获得文件相应图标 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); //因为类型(除了exe)相同的文件,图标相同,所以可以按拓展名存取图标 ilstIcons.Images.Add(fileInfo.Extension, fileIcon); } item.ImageKey = fileInfo.Extension; } item.Tag = fileInfo.FullName; item.SubItems.Add(fileInfo.LastWriteTime.ToString()); item.SubItems.Add(fileInfo.Extension + "文件"); item.SubItems.Add(AttributeForm.ShowFileSize(fileInfo.Length).Split('(')[0]); } } catch (Exception e) { MessageBox.Show(e.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } //更新当前路径 curFilePath = path; //更新地址栏 tscboAddress.Text = curFilePath; //更新状态栏 tsslblFilesNum.Text = lvwFiles.Items.Count + " 个项目"; //结束数据更新 lvwFiles.EndUpdate(); }